[
https://issues.apache.org/jira/browse/CXF-2228?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Kulp resolved CXF-2228.
------------------------------
Resolution: Fixed
Fix Version/s: 2.2.2
2.1.6
Assignee: Daniel Kulp
> WSDL2XML generated binding not passing correct method arguments in service
> implementation
> -----------------------------------------------------------------------------------------
>
> Key: CXF-2228
> URL: https://issues.apache.org/jira/browse/CXF-2228
> Project: CXF
> Issue Type: Bug
> Affects Versions: 2.1.3, 2.1.5
> Environment: Test Service is deployed in Tomcat (6.0.14) Using Java
> build (1.6.0_06-b020)
> Reporter: Vinod D
> Assignee: Daniel Kulp
> Fix For: 2.1.6, 2.2.2
>
>
> http://www.nabble.com/wsdl2xml-and-XML-Binding-td23608106.html
> Hello
> I am running into an isse with XML Binding. Here is what I am doing
> - Using CXF 2.1.3 and deploying it in tomcat 6.x
> - Define a simple wsdl (wsdl first approach) with one method (sayHi) which
> takes two string params and returns a cat-ed string.
> - Works fine using SOAP Binding (first two log entried below).
> - Used wsdl2xml tool to create a XML Port and XML Binding and invoke the
> sayHi method.
> - I see in XML message logging on tomcat call (sayHi) coming with two string
> param , however to the service method impl I see both the strings
> are passed as null (last two log-entry below).
> Are there any issues re. using wsdl2xml in this manner or something I am
> missing.
> regards
> -Vinod
> ----------------------------------
> INFO: Inbound Message
> ----------------------------
> Payload: <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><
> soap:Body><ns2:sayHi
> xmlns:ns2="http://acme.com/test/"><arg1>argument1</arg1><ar
> g2>argument2</arg2></ns2:sayHi></soap:Body></soap:Envelope>
> --------------------------------------
> TestPortTypeImpl::sayHi() is called arg1=argument1, arg2=argument2
> May 18, 2009 4:42:25 PM
> org.apache.cxf.interceptor.LoggingOutInterceptor$Logging
> Callback onClose
> INFO: Outbound Message
> ---------------------------
> Payload: <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><
> soap:Body><ns2:sayHiResponse xmlns:ns2="http://acme.com/test/"><out>sayHi to
> : a
> rgument1 and argument2</out></ns2:sayHiResponse></soap:Body></soap:Envelope>
> --------------------------------------
> INFO: Inbound Message
> ----------------------------
> Payload: <ns2:sayHi
> xmlns:ns2="http://acme.com/test/"><arg1>argument1</arg1><arg
> 2>argument2</arg2></ns2:sayHi>
> --------------------------------------
> TestPortTypeXMLImpl::sayHi() is called arg1=null, arg2=null
> May 18, 2009 4:47:55 PM
> org.apache.cxf.interceptor.LoggingOutInterceptor$Logging
> Callback onClose
> INFO: Outbound Message
> ---------------------------
> Encoding: UTF-8
> Headers: {}
> Messages:
> Payload: <ns2:sayHiResponse xmlns:ns2="http://acme.com/test/"><out>sayHi to :
> nu
> ll and null</out></ns2:sayHiResponse>
> --------------------------------------
> Some more obervation:
> If I comment out the <xformat:body ...rootNode="sayHi"> element from the XML
> binding generated by wsdl2xml as shown below, I see the parameters passed
> correctly to the service implementation and works as expected.
> <wsdl:bindingname="testXMLBinding"type="tns:testPortType"><xformat:binding/><wsdl:operationname="sayHi"><wsdl:input><!--
> xformat:body xmlns="http://acme.com/test/" rootNode="sayHi" /
> --></wsdl:input><wsdl:output><!-- xformat:body xmlns="http://acme.com/test/"
> rootNode="sayHi" / --></wsdl:output></wsdl:operation></wsdl:binding>
> Not sure what is right approach here ..
> -Vinod
> Re: wsdl2xml and XML Binding by dkulp May 19, 2009; 01:24pm :: Rate this
> Message: - Use ratings to moderate (?)
> Reply | Reply to Author | Print | View Threaded | Show Only this Message
> That SHOULD be fine. Can you :
> 1) try with CXF 2.1.5 or 2.2.1. This MAY be fixed already.
> 2) If not, can you package up your sample and attach it to a JIRA bug report?
> Thanks!
> Dan
>
> - I tried using 2.1.5 and still observed the same issue. Test Wsdl which has
> xml binding generated from WSDL2XML and client/server are pasted below.
> WSDL
> _____
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions name="test" targetNamespace="http://acme.com/test/"
> xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
> xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:tns="http://acme.com/test/"
> xmlns:xformat="http://cxf.apache.org/bindings/xformat"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
> <wsdl:types>
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://acme.com/test/">
> <xsd:element name="sayHi">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="arg1" type="xsd:string"/>
> <xsd:element name="arg2" type="xsd:string">
> </xsd:element>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> <xsd:element name="sayHiResponse">
> <xsd:complexType>
> <xsd:sequence>
> <xsd:element name="out" type="xsd:string"/>
> </xsd:sequence>
> </xsd:complexType>
> </xsd:element>
> </xsd:schema>
> </wsdl:types>
> <wsdl:message name="sayHiRequest">
> <wsdl:part name="in" element="tns:sayHi">
> </wsdl:part>
> </wsdl:message>
> <wsdl:message name="sayHiResponse">
> <wsdl:part name="out" element="tns:sayHiResponse">
> </wsdl:part>
> </wsdl:message>
> <wsdl:portType name="testPortType">
> <wsdl:operation name="sayHi">
> <wsdl:input message="tns:sayHiRequest">
> </wsdl:input>
> <wsdl:output message="tns:sayHiResponse">
> </wsdl:output>
> </wsdl:operation>
> </wsdl:portType>
> <wsdl:binding name="testSOAP" type="tns:testPortType">
> <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http"/>
> <wsdl:operation name="sayHi">
> <soap:operation soapAction="http://acme.com/test/sayHi"/>
> <wsdl:input>
> <soap:body use="literal"/>
> </wsdl:input>
> <wsdl:output>
> <soap:body use="literal"/>
> </wsdl:output>
> </wsdl:operation>
> </wsdl:binding>
> <wsdl:binding name="testXMLBinding" type="tns:testPortType">
> <xformat:binding />
> <wsdl:operation name="sayHi">
> <wsdl:input>
> <xformat:body xmlns="http://acme.com/test/" rootNode="sayHi" />
> </wsdl:input>
> <wsdl:output>
> <xformat:body xmlns="http://acme.com/test/" rootNode="sayHi" />
> </wsdl:output>
> </wsdl:operation>
> </wsdl:binding>
> <wsdl:service name="test">
> <wsdl:port name="testXMLPort" binding="tns:testXMLBinding">
> <http:address location="http://localhost:8080/test/services/testxml" />
> </wsdl:port>
> <wsdl:port name="testSOAP" binding="tns:testSOAP">
> <soap:address location="http://localhost:8080/test/services/test"/>
> </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
> Service
> ______
> TestPortTypeImpl.java and TestPortTypeXMLImpl.java are below
> package com.acme.server;
> import javax.jws.WebService;
> import com.acme.test.TestPortType;
> /**
> *
> */
> @WebService(targetNamespace = "http://acme.com/test/",
> portName="testXMLPort",
> serviceName="test",
> endpointInterface="com.acme.test.TestPortType")
> public class TestPortTypeXMLImpl implements TestPortType {
> /*
> * (non-Javadoc)
> *
> * @see com.acme.test.TestPortType#sayHi(java.lang.String,
> java.lang.String)
> */
> public String sayHi(String arg1, String arg2) {
> System.out.println("TestPortTypeXMLImpl::sayHi() is called
> arg1="
> + arg1 + ", arg2=" + arg2);
> return "sayHi to : " + arg1 + " and " + arg2;
> }
> }
> package com.acme.server;
> import javax.jws.WebService;
> import javax.xml.bind.annotation.XmlSeeAlso;
> import com.acme.test.ObjectFactory;
> import com.acme.test.TestPortType;
> /**
> * Some test program
> */
> @WebService(targetNamespace = "http://acme.com/test/",
> portName="testSOAP",
> serviceName="test",
> endpointInterface="com.acme.test.TestPortType")
> @XmlSeeAlso({ObjectFactory.class})
> public class TestPortTypeImpl implements TestPortType {
> /* (non-Javadoc)
> * @see com.acme.test.TestPortType#sayHi(java.lang.String,
> java.lang.String)
> */
> public String sayHi(String arg1, String arg2) {
> System.out.println("TestPortTypeImpl::sayHi() is called arg1="
> + arg1 +
> ", arg2=" + arg2 );
> return "sayHi to : " + arg1 + " and " + arg2;
> }
> }
> Client Test Program
> ________________
> package com.acme.client;
> import java.net.MalformedURLException;
> import java.net.URL;
> import javax.xml.namespace.QName;
> import com.acme.test.Test;
> import com.acme.test.TestPortType;
> /**
> *
> */
> public class TestClient {
> public final static URL WSDL_LOCATION;
> public final static QName SERVICE = new QName("http://acme.com/test/",
> "test");
> public final static QName TestSoapPort = new
> QName("http://acme.com/test/", "TestSOAP");
> public final static QName TestXMLPort = new
> QName("http://acme.com/test/", "TestXMLPort");
>
> Test m_testService = null;
> TestPortType m_portType = null;
>
> static {
> URL url = null;
> try {
> url = new URL("http://localhost:8080/acws/services/test?wsdl");
> } catch (MalformedURLException e) {
> System.err.println("Can not initialize the default wsdl from
> file:/C:/acme/nbi/cpsm/build/../nbi/wsdl/acws.wsdl");
> // e.printStackTrace();
> }
> WSDL_LOCATION = url;
> }
>
> /**
> * @param args
> */
> public static void main(String[] args) {
> TestClient client = new TestClient();
> client.initializeService(args);
> client.testHi(args);
> }
>
> private void testHi(String[] args) {
> try {
> String result = m_portType.sayHi("argument1", "argument2");
> System.out.println("Called sayHi() and got =" + result);
> }catch (Exception e) {
> e.printStackTrace();
> }
> }
> private void initializeService(String [] args) {
>
> try {
> m_testService = new Test(WSDL_LOCATION, SERVICE);
> m_portType = m_testService.getTestXMLPort();
> } catch (Exception e) {
> e.printStackTrace();
> }
> }
> }
> Please refer to the thread on this ->
> http://www.nabble.com/wsdl2xml-and-XML-Binding-td23608106.html
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.