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 {