[ 
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.

Reply via email to