Author: dkulp
Date: Tue Feb  6 12:56:15 2007
New Revision: 504289

URL: http://svn.apache.org/viewvc?view=rev&rev=504289
Log:
Testcase for CXF-261

* CXF-261 is no longer applicable, but nothing tests it.   Added a rcp/literal 
soap header test
* That said, the code generator was broken for rpc/literal with headers 
(headers are always doc/literal).  Fixed that and added a test in testutils to 
check to makre sure the generated code is correct.


Added:
    incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/rpc/
    
incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/rpc/TestRPCHeaderImpl.java
   (with props)
    incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader_rpc.wsdl   
(with props)
Modified:
    
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
    incubator/cxf/trunk/testutils/pom.xml
    
incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ParameterProcessor.java
    
incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ServiceProcessor.java

Modified: 
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java?view=diff&rev=504289&r1=504288&r2=504289
==============================================================================
--- 
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
 (original)
+++ 
incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/header/HeaderClientServerTest.java
 Tue Feb  6 12:56:15 2007
@@ -36,6 +36,10 @@
 import org.apache.header_test.SOAPHeaderService;
 import org.apache.header_test.TestHeader;
 import org.apache.header_test.TestHeaderImpl;
+import org.apache.header_test.rpc.SOAPRPCHeaderService;
+import org.apache.header_test.rpc.TestRPCHeader;
+import org.apache.header_test.rpc.TestRPCHeaderImpl;
+import org.apache.header_test.rpc.types.HeaderMessage;
 import org.apache.header_test.types.TestHeader1;
 import org.apache.header_test.types.TestHeader1Response;
 import org.apache.header_test.types.TestHeader2;
@@ -54,27 +58,31 @@
     private final QName portName = new QName("http://apache.org/header_test";,
                                              "SoapHeaderPort");
 
-    private TestHeader proxy;
-    
     public void setUp() throws Exception {
         super.setUp();
         BusFactory.setDefaultBus(getBus());
         
         Object implementor = new TestHeaderImpl();
         String address = 
"http://localhost:9104/SoapHeaderContext/SoapHeaderPort";;
-        EndpointImpl e = (EndpointImpl) Endpoint.publish(address, implementor);
+        EndpointImpl e = (EndpointImpl) Endpoint.publish(address, 
implementor);        
+        e.getServer().getEndpoint().getInInterceptors().add(new 
LoggingInInterceptor());
+        e.getServer().getEndpoint().getOutInterceptors().add(new 
LoggingOutInterceptor());
         
+        implementor = new TestRPCHeaderImpl();
+        address = 
"http://localhost:9104/SoapHeaderRPCContext/SoapHeaderRPCPort";;
+        e = (EndpointImpl)Endpoint.publish(address, implementor);        
         e.getServer().getEndpoint().getInInterceptors().add(new 
LoggingInInterceptor());
         e.getServer().getEndpoint().getOutInterceptors().add(new 
LoggingOutInterceptor());
+        
     }
-    
+
     public void testInHeader() throws Exception {
         URL wsdl = getClass().getResource("/wsdl/soapheader.wsdl");
         assertNotNull(wsdl);
         
         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
         assertNotNull(service);
-        proxy = service.getPort(portName, TestHeader.class);
+        TestHeader proxy = service.getPort(portName, TestHeader.class);
         try {
             TestHeader1 val = new TestHeader1();
             for (int idx = 0; idx < 2; idx++) {
@@ -93,7 +101,7 @@
         
         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
         assertNotNull(service);
-        proxy = service.getPort(portName, TestHeader.class);
+        TestHeader proxy = service.getPort(portName, TestHeader.class);
         try {
             TestHeader2 in = new TestHeader2();
             String val = new String(TestHeader2Response.class.getSimpleName());
@@ -119,7 +127,7 @@
         
         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
         assertNotNull(service);
-        proxy = service.getPort(portName, TestHeader.class);
+        TestHeader proxy = service.getPort(portName, TestHeader.class);
         
         try {
             TestHeader3 in = new TestHeader3();
@@ -154,7 +162,7 @@
         
         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
         assertNotNull(service);
-        proxy = service.getPort(portName, TestHeader.class);
+        TestHeader proxy = service.getPort(portName, TestHeader.class);
         try {
             TestHeader5 in = new TestHeader5();
             String val = new String(TestHeader5.class.getSimpleName());
@@ -178,7 +186,7 @@
         
         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
         assertNotNull(service);
-        proxy = service.getPort(portName, TestHeader.class);
+        TestHeader proxy = service.getPort(portName, TestHeader.class);
     
         TestHeader6 in = new TestHeader6();
         String val = new String(TestHeader6.class.getSimpleName());
@@ -209,7 +217,7 @@
         
         SOAPHeaderService service = new SOAPHeaderService(wsdl, serviceName);
         assertNotNull(service);
-        proxy = service.getPort(portName, TestHeader.class);
+        TestHeader proxy = service.getPort(portName, TestHeader.class);
         try {
             proxy.testHeader4("cxf");
         } catch (Exception e) {
@@ -218,6 +226,56 @@
         }
     }
 
+    public void testRPCInHeader() throws Exception {
+        URL wsdl = getClass().getResource("/wsdl/soapheader_rpc.wsdl");
+        assertNotNull(wsdl);
+        
+        SOAPRPCHeaderService service
+            = new SOAPRPCHeaderService(wsdl, 
+                new QName("http://apache.org/header_test/rpc";, 
"SOAPRPCHeaderService"));
+        assertNotNull(service);
+        TestRPCHeader proxy = service.getSoapRPCHeaderPort();
+        try { 
+            HeaderMessage header = new HeaderMessage();
+            header.setHeaderVal("header");
+            
+            for (int idx = 0; idx < 2; idx++) {
+                String returnVal = proxy.testHeader1("part", header);
+                assertNotNull(returnVal);
+                assertEquals("part/header", returnVal);
+            }
+        } catch (UndeclaredThrowableException ex) {
+            throw (Exception)ex.getCause();
+        }
+    } 
+    
+    public void testRPCInOutHeader() throws Exception {
+        URL wsdl = getClass().getResource("/wsdl/soapheader_rpc.wsdl");
+        assertNotNull(wsdl);
+        
+        SOAPRPCHeaderService service
+            = new SOAPRPCHeaderService(wsdl, 
+                new QName("http://apache.org/header_test/rpc";, 
"SOAPRPCHeaderService"));
+        assertNotNull(service);
+        TestRPCHeader proxy = service.getSoapRPCHeaderPort();
+        try { 
+            HeaderMessage header = new HeaderMessage();
+            Holder<HeaderMessage> holder = new Holder<HeaderMessage>(header);
+            
+            for (int idx = 0; idx < 2; idx++) {
+                holder.value.setHeaderVal("header" + idx);
+                String returnVal = proxy.testInOutHeader("part" + idx, holder);
+                
+                assertNotNull(returnVal);
+                assertEquals("header" + idx, returnVal);
+                assertEquals("part" + idx, holder.value.getHeaderVal());
+            }
+        } catch (UndeclaredThrowableException ex) {
+            throw (Exception)ex.getCause();
+        }
+    } 
+    
+    
     public static void main(String[] args) {
         junit.textui.TestRunner.run(HeaderClientServerTest.class);
     }

Modified: incubator/cxf/trunk/testutils/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/pom.xml?view=diff&rev=504289&r1=504288&r2=504289
==============================================================================
--- incubator/cxf/trunk/testutils/pom.xml (original)
+++ incubator/cxf/trunk/testutils/pom.xml Tue Feb  6 12:56:15 2007
@@ -244,6 +244,9 @@
                                     
<wsdl>${basedir}/src/main/resources/wsdl/soapheader2.wsdl</wsdl>
                                 </wsdlOption>
                                 <wsdlOption>
+                                    
<wsdl>${basedir}/src/main/resources/wsdl/soapheader_rpc.wsdl</wsdl>
+                                </wsdlOption>
+                                <wsdlOption>
                                     
<wsdl>${basedir}/src/main/resources/wsdl/locator.wsdl</wsdl>
                                     <extraargs>
                                         <extraarg>-p</extraarg>

Added: 
incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/rpc/TestRPCHeaderImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/rpc/TestRPCHeaderImpl.java?view=auto&rev=504289
==============================================================================
--- 
incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/rpc/TestRPCHeaderImpl.java
 (added)
+++ 
incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/rpc/TestRPCHeaderImpl.java
 Tue Feb  6 12:56:15 2007
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.header_test.rpc;
+
+import javax.jws.WebService;
+import javax.xml.ws.Holder;
+
+import org.apache.header_test.rpc.types.HeaderMessage;
+
+
[EMAIL PROTECTED](serviceName = "SOAPRPCHeaderService", 
+            portName = "SoapRPCHeaderPort", 
+            endpointInterface = "org.apache.header_test.rpc.TestRPCHeader",
+            targetNamespace = "http://apache.org/header_test/rpc";)
+            
+public class TestRPCHeaderImpl implements TestRPCHeader {
+
+    public String testHeader1(String in, HeaderMessage inHeader) {
+        if (in == null || inHeader == null) {
+            throw new IllegalArgumentException("TestHeader1 part not found.");
+        }
+        
+        return in + "/" + inHeader.getHeaderVal();
+    }
+
+    public String testInOutHeader(String in, Holder<HeaderMessage> 
inOutHeader) {
+        String tmp = inOutHeader.value.getHeaderVal();
+        inOutHeader.value.setHeaderVal(in);
+        return tmp;
+    }
+
+}

Propchange: 
incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/rpc/TestRPCHeaderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/cxf/trunk/testutils/src/main/java/org/apache/header_test/rpc/TestRPCHeaderImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader_rpc.wsdl
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader_rpc.wsdl?view=auto&rev=504289
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader_rpc.wsdl 
(added)
+++ incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader_rpc.wsdl 
Tue Feb  6 12:56:15 2007
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:tns="http://apache.org/header_test/rpc"; 
xmlns:x1="http://apache.org/header_test/rpc/types"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
targetNamespace="http://apache.org/header_test/rpc"; name="TestHeaderWSDL">
+    <wsdl:types>
+        <schema targetNamespace="http://apache.org/header_test/rpc/types"; 
xmlns="http://www.w3.org/2001/XMLSchema"; 
xmlns:x1="http://apache.org/header_test/rpc/types"; 
elementFormDefault="qualified">
+            <element name="headerMessage">
+                <complexType>
+                   <sequence>
+                        <element name="headerVal" type="string"/>
+                   </sequence>
+               </complexType>
+            </element>
+        </schema>
+    </wsdl:types>
+    <wsdl:message name="testHeader1Request">
+        <wsdl:part name="in" type="xsd:string"/>
+        <wsdl:part name="inHeader" element="x1:headerMessage"/>
+    </wsdl:message>
+    <wsdl:message name="testHeader1Response">
+        <wsdl:part name="out" type="xsd:string"/>
+    </wsdl:message>
+
+    <wsdl:message name="testInOutHeaderRequest">
+        <wsdl:part name="in" type="xsd:string"/>
+        <wsdl:part name="inOutHeader" element="x1:headerMessage"/>
+    </wsdl:message>
+    <wsdl:message name="testInOutHeaderResponse">
+        <wsdl:part name="out" type="xsd:string"/>
+        <wsdl:part name="inOutHeader" element="x1:headerMessage"/>
+    </wsdl:message>
+
+    <wsdl:portType name="TestRPCHeader">
+        <wsdl:operation name="testHeader1">
+            <wsdl:input name="testHeader1Request" 
message="tns:testHeader1Request"/>
+            <wsdl:output name="testHeader1Response" 
message="tns:testHeader1Response"/>
+        </wsdl:operation>
+        <wsdl:operation name="testInOutHeader">
+            <wsdl:input name="testInOutHeaderRequest" 
message="tns:testInOutHeaderRequest"/>
+            <wsdl:output name="testInOutHeaderResponse" 
message="tns:testInOutHeaderResponse"/>
+        </wsdl:operation>
+    </wsdl:portType>
+    <wsdl:binding name="TestHeader_SOAPRPCBinding" type="tns:TestRPCHeader">
+        <soap:binding style="rpc" 
transport="http://schemas.xmlsoap.org/soap/http"/>
+        <wsdl:operation name="testHeader1">
+            <soap:operation/>
+            <wsdl:input name="testHeader1Request">
+                <soap:body message="tns:testHeader1Request" parts="in" 
use="literal" namespace="http://apache.org/header_test"/>
+                <soap:header message="tns:testHeader1Request" part="inHeader" 
use="literal"/>
+            </wsdl:input>
+            <wsdl:output name="testHeader1Response">
+                <soap:body message="tns:testHeader1Response" use="literal" 
namespace="http://apache.org/header_test"/>
+            </wsdl:output>
+        </wsdl:operation>
+        <wsdl:operation name="testInOutHeader">
+            <soap:operation/>
+            <wsdl:input>
+                <soap:body message="tns:testInOutHeaderRequest" parts="in" 
use="literal" namespace="http://apache.org/header_test"/>
+                <soap:header message="tns:testInOutHeaderRequest" 
part="inOutHeader" use="literal"/>
+            </wsdl:input>
+            <wsdl:output>
+                <soap:body message="tns:testInOutHeaderResponse" parts="out" 
use="literal" namespace="http://apache.org/header_test"/>
+                <soap:header message="tns:testInOutHeaderRequest" 
part="inOutHeader" use="literal"/>
+            </wsdl:output>
+        </wsdl:operation>
+    </wsdl:binding>
+    <wsdl:service name="SOAPRPCHeaderService">
+        <wsdl:port name="SoapRPCHeaderPort" 
binding="tns:TestHeader_SOAPRPCBinding">
+            <soap:address 
location="http://localhost:9104/SoapHeaderRPCContext/SoapHeaderRPCPort"/>
+        </wsdl:port>
+    </wsdl:service>
+</wsdl:definitions>

Propchange: 
incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader_rpc.wsdl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader_rpc.wsdl
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
incubator/cxf/trunk/testutils/src/main/resources/wsdl/soapheader_rpc.wsdl
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: 
incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ParameterProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ParameterProcessor.java?view=diff&rev=504289&r1=504288&r2=504289
==============================================================================
--- 
incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ParameterProcessor.java
 (original)
+++ 
incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ParameterProcessor.java
 Tue Feb  6 12:56:15 2007
@@ -129,7 +129,9 @@
         String targetNamespace = method.getInterface().getNamespace();
         String partName = null;
 
-        if (method.getSoapStyle() == SOAPBinding.Style.DOCUMENT) {
+        if (method.getSoapStyle() == SOAPBinding.Style.DOCUMENT
+            || parameter.isHeader()) {
+            //headers are always DOCUMENT style
             targetNamespace = parameter.getTargetNamespace();
             if (parameter.getQName() != null) {
                 name = parameter.getQName().getLocalPart();
@@ -151,7 +153,8 @@
             webParamAnnotation.addArgument("mode", "Mode." + 
parameter.getStyle().toString(), "");
         }
         webParamAnnotation.addArgument("name", name);
-        if (method.getSoapStyle() == SOAPBinding.Style.DOCUMENT) {
+        if (method.getSoapStyle() == SOAPBinding.Style.DOCUMENT
+            || parameter.isHeader()) {
             webParamAnnotation.addArgument("targetNamespace", targetNamespace);
         }
 

Modified: 
incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ServiceProcessor.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ServiceProcessor.java?view=diff&rev=504289&r1=504288&r2=504289
==============================================================================
--- 
incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ServiceProcessor.java
 (original)
+++ 
incubator/cxf/trunk/tools/wsdl2java/src/main/java/org/apache/cxf/tools/wsdl2java/processor/internal/ServiceProcessor.java
 Tue Feb  6 12:56:15 2007
@@ -300,6 +300,8 @@
     private void setParameterAsHeader(JavaParameter parameter) {
         parameter.setHeader(true);
         parameter.getAnnotation().addArgument("header", "true", "");
+        parameter.getAnnotation().addArgument("name", 
parameter.getQName().getLocalPart());
+        parameter.getAnnotation().addArgument("targetNamespace", 
parameter.getTargetNamespace());
     }
 
     private void processParameter(JavaMethod jm, BindingOperation operation) 
throws ToolException {


Reply via email to