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 2010/03/09 00:40:41 UTC

svn commit: r920568 - in /cxf/trunk: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ rt/core/src/main/java/org/apache/cxf/wsdl11/ rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ systests/jaxws/src/test/java/org/...

Author: dkulp
Date: Mon Mar  8 23:40:41 2010
New Revision: 920568

URL: http://svn.apache.org/viewvc?rev=920568&view=rev
Log:
[CXF-2692] Fix NPE with meethod with only header param

Modified:
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
    cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
    cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java
    cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java
    cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java?rev=920568&r1=920567&r2=920568&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapOutInterceptor.java Mon Mar  8 23:40:41 2010
@@ -215,6 +215,9 @@
 
             for (SoapHeaderInfo header : headers) {
                 MessagePartInfo part = header.getPart();
+                if (wrappedBmi != bmi) {
+                    part = wrappedBmi.getMessageInfo().addMessagePart(part.getName());
+                }
                 if (part.getIndex() >= objs.size()) {
                     // The optional out of band header is not a part of parameters of the method
                     continue;

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?rev=920568&r1=920567&r2=920568&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java Mon Mar  8 23:40:41 2010
@@ -617,8 +617,11 @@
         // The operation's input and output message (if present) each contain
         // only a single part
         // input message must exist
-        if (inputMessage == null || inputMessage.size() != 1
-            || (outputMessage != null && outputMessage.size() > 1)) {
+        if (inputMessage == null || inputMessage.size() == 0 
+            || (inputMessage.size() > 1 && !relaxed)) {
+            passedRule = false;
+        }
+        if (outputMessage != null && outputMessage.size() > 1) {
             passedRule = false;
         }
 

Modified: cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?rev=920568&r1=920567&r2=920568&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java (original)
+++ cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java Mon Mar  8 23:40:41 2010
@@ -801,6 +801,7 @@
                                      Class paramType, Type genericType) {
         boolean isIn = isInParam(method, i);
         boolean isOut = isOutParam(method, i);
+        boolean isHeader = isHeader(method, i);
         Annotation[] paraAnnos = null;
         if (i != -1 && o.getProperty(METHOD_PARAM_ANNOTATIONS) != null) {
             Annotation[][] anns = (Annotation[][])o.getProperty(METHOD_PARAM_ANNOTATIONS);
@@ -816,6 +817,20 @@
             if (part == null && isFromWsdl()) {
                 part = o.getInput().getMessagePartByIndex(i);
             }
+            if (part == null && isHeader && o.isUnwrapped()) {
+                part = ((UnwrappedOperationInfo)o).getWrappedOperation().getInput().getMessagePart(name);
+                if (part != null) {
+                    //header part in wsdl, need to get this mapped in to the unwrapped form
+                    MessagePartInfo inf = o.getInput().addMessagePart(part.getName());
+                    inf.setTypeQName(part.getTypeQName());
+                    inf.setElement(part.isElement());
+                    inf.setElementQName(part.getElementQName());
+                    inf.setConcreteName(part.getConcreteName());
+                    inf.setXmlSchema(part.getXmlSchema());
+                    part = inf;
+                    inf.setProperty(HEADER, Boolean.TRUE);
+                }
+            }
             if (part == null) {
                 return false;
             }
@@ -840,6 +855,9 @@
             if (part == null && this.isFromWsdl()) {
                 part = o.getInput().getMessagePartByIndex(i);
             }
+            if (part == null && isHeader && o.isUnwrapped()) {
+                part = o.getUnwrappedOperation().getInput().getMessagePart(name);
+            }
             if (part == null) {
                 return false;
             }

Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java?rev=920568&r1=920567&r2=920568&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerMiscTest.java Mon Mar  8 23:40:41 2010
@@ -425,6 +425,7 @@
         assertEquals("Hello", echoMsg);
     }
     private void runDocLitTest(DocLitWrappedCodeFirstService port) throws Exception {
+        assertEquals("snarf", port.doBug2692("snarf"));
         CXF2411Result<CXF2411SubClass> o = port.doCXF2411();
         assertNotNull(o);
         assertNotNull(o.getContent());
@@ -433,7 +434,6 @@
         Foo foo = new Foo();
         foo.setName("blah");
         assertEquals("blah", port.modifyFoo(foo).getName());
-        
 
         assertEquals("hello", port.outOnly(new Holder<String>(), new Holder<String>()));
         

Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java?rev=920568&r1=920567&r2=920568&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstService.java Mon Mar  8 23:40:41 2010
@@ -195,6 +195,10 @@
         }
     }
     
+    @WebResult(name = "return")
+    String doBug2692(@WebParam(name = "name", header = true) String name);
+
+    
     Set<Foo> getFooSet();
     
     Foo modifyFoo(Foo foo);

Modified: cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java?rev=920568&r1=920567&r2=920568&view=diff
==============================================================================
--- cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java (original)
+++ cxf/trunk/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/DocLitWrappedCodeFirstServiceImpl.java Mon Mar  8 23:40:41 2010
@@ -236,5 +236,9 @@
         ret.setContent(content);
         return ret;
     }
+
+    public String doBug2692(String name) {
+        return name;
+    }
     
 }