You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2007/04/25 04:29:22 UTC

svn commit: r532173 - in /incubator/cxf/trunk: rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java

Author: dkulp
Date: Tue Apr 24 19:29:21 2007
New Revision: 532173

URL: http://svn.apache.org/viewvc?view=rev&rev=532173
Log:
Implement a couple of the LogicalMessage methods

Modified:
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java?view=diff&rev=532173&r1=532172&r2=532173
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java Tue Apr 24 19:29:21 2007
@@ -24,10 +24,21 @@
 import java.util.List;
 
 import javax.xml.bind.JAXBContext;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
 import javax.xml.ws.LogicalMessage;
+import javax.xml.ws.WebServiceException;
+import javax.xml.ws.soap.SOAPFaultException;
 
+
+import org.apache.cxf.interceptor.BareInInterceptor;
+import org.apache.cxf.interceptor.BareOutInterceptor;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.staxutils.StaxUtils;
+import org.apache.cxf.staxutils.W3CDOMStreamWriter;
 
 
 public class LogicalMessageImpl implements LogicalMessage {
@@ -39,21 +50,58 @@
     }
 
     public Source getPayload() {
-        return msgContext.getWrappedMessage().getContent(Source.class);
+        Source source = msgContext.getWrappedMessage().getContent(Source.class);
+        if (source == null) {
+            //need to convert
+            Exception ex = msgContext.getWrappedMessage().getContent(Exception.class);
+            if (ex instanceof SOAPFaultException) {
+                List<Object> list = new ArrayList<Object>();
+                list.add(((SOAPFaultException)ex).getFault());
+                msgContext.getWrappedMessage().setContent(List.class, list);
+            }
+            
+            W3CDOMStreamWriter writer;
+            try {
+                writer = new W3CDOMStreamWriter();
+            } catch (ParserConfigurationException e) {
+                throw new WebServiceException(e);
+            }
+            XMLStreamWriter orig = msgContext.getWrappedMessage().getContent(XMLStreamWriter.class);
+            try {
+                msgContext.getWrappedMessage().setContent(XMLStreamWriter.class, writer);
+                BareOutInterceptor bi = new BareOutInterceptor();
+                bi.handleMessage(msgContext.getWrappedMessage());
+            } finally {
+                msgContext.getWrappedMessage().setContent(XMLStreamWriter.class, orig); 
+            }
+            
+            source = new DOMSource(writer.getDocument().getDocumentElement());
+            msgContext.getWrappedMessage().setContent(Source.class, source);
+        }
+        return source;
     }
 
     public void setPayload(Source s) {
-        msgContext.getWrappedMessage().setContent(Source.class, s);
+        msgContext.getWrappedMessage().setContent(Source.class, null);
+        XMLStreamReader orig = msgContext.getWrappedMessage().getContent(XMLStreamReader.class);
+        try {
+            XMLStreamReader reader = StaxUtils.createXMLStreamReader(s);
+            msgContext.getWrappedMessage().setContent(XMLStreamReader.class, reader);
+            BareInInterceptor bin = new BareInInterceptor();
+            bin.handleMessage(msgContext.getWrappedMessage());
+        } finally {
+            msgContext.getWrappedMessage().setContent(XMLStreamReader.class, orig);
+        }
     }
 
     public Object getPayload(JAXBContext arg0) {
-        // TODO - what to do with JAXB context?
         Message msg = msgContext.getWrappedMessage();
         if (msg.getContent(List.class) != null) {
             return msg.getContent(List.class).get(0);
         } else if (msg.getContent(Object.class) != null) {
             return msg.getContent(Object.class);
         }
+        // TODO - what to do with JAXB context?
         return null;
     }
 

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java?view=diff&rev=532173&r1=532172&r2=532173
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/SmallNumberHandler.java Tue Apr 24 19:29:21 2007
@@ -24,8 +24,10 @@
 import javax.annotation.Resource;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
+import javax.xml.transform.Source;
 import javax.xml.ws.LogicalMessage;
 import javax.xml.ws.ProtocolException;
+import javax.xml.ws.WebServiceException;
 import javax.xml.ws.handler.LogicalHandler;
 import javax.xml.ws.handler.LogicalMessageContext;
 import javax.xml.ws.handler.MessageContext;
@@ -87,6 +89,13 @@
                         AddNumbersResponse resp = new AddNumbersResponse();
                         resp.setReturn(answer);
                         msg.setPayload(resp, jaxbContext);
+                        
+                        Source src = msg.getPayload();
+                        msg.setPayload(src);
+                        AddNumbersResponse resp2 = (AddNumbersResponse)msg.getPayload(jaxbContext);
+                        if (resp2 == resp) {
+                            throw new WebServiceException("Shouldn't be the same object");
+                        }
 
                         // finally, return false, indicating that request
                         // processing stops here and our answer will be