[
https://issues.apache.org/jira/browse/CXF-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12545463
]
Nianhua Li commented on CXF-1226:
---------------------------------
Actually I do believe that my namespace annotations in my SEI have been
looked at. I have only specified namespace "http://nstest.helloworld" in
my SEI, not anywhere else. The namespace has been included in the WSDL.
Therefore, either CXF's java-wsdl mapping or CXF's java-soap mapping is
wrong.
The other problem in this issue is on the client side. Forget about the
server side; assume we start from the WSDL. The input/output parameters
have namespace specified in WSDL. The client created from wsdl2java
should be consistent with the WSDL. Why the namespace get lost from the
SOAP message?
So, this issue indicates problems on both server and client side. I
believe both problems are valid. I don't understand why you close the
issue.
> Missing input/output param namespace in SOAP
> --------------------------------------------
>
> Key: CXF-1226
> URL: https://issues.apache.org/jira/browse/CXF-1226
> Project: CXF
> Issue Type: Bug
> Affects Versions: 2.0.2, 2.0.3
> Environment: Windows XP; Tomcat 5.5
> Reporter: Nianhua Li
> Assignee: Benson Margulies
> Fix For: 2.0.3
>
>
> I am using the java-first approach with spring configuration on cxf 2.0.3 and
> tomcat 5.5. I specified namespace for all the input and output parameters via
> @WebParam and @WebResult annotation. But the namespace was somehow missing
> from the SOAP message.
> You can reproduce the problem by using the following test code (server side):
> =================web.xml========================================
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <!DOCTYPE web-app
> PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
> "http://java.sun.com/dtd/web-app_2_3.dtd">
> <web-app>
> <context-param>
> <param-name>contextConfigLocation</param-name>
> <param-value>WEB-INF/beans.xml</param-value>
> </context-param>
> <listener>
>
> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
> </listener>
> <servlet>
> <servlet-name>CXFServlet</servlet-name>
> <display-name>CXF Servlet</display-name>
> <servlet-class>
> org.apache.cxf.transport.servlet.CXFServlet
> </servlet-class>
> <load-on-startup>1</load-on-startup>
> </servlet>
> <servlet-mapping>
> <servlet-name>CXFServlet</servlet-name>
> <url-pattern>/*</url-pattern>
> </servlet-mapping>
> </web-app>
> ---------------------------------------------------------------------------------------------------------------
> =================beans.xml=======================================
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:jaxws="http://cxf.apache.org/jaxws"
> xmlns:cxf="http://cxf.apache.org/core"
> xsi:schemaLocation="
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans.xsd
> http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
> http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
> <import resource="classpath:META-INF/cxf/cxf.xml" />
> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
> <bean id="logInbound"
> class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
> <bean id="logOutbound"
> class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
> <cxf:bus>
> <cxf:inInterceptors> <ref bean="logInbound"/> </cxf:inInterceptors>
> <cxf:outInterceptors> <ref bean="logOutbound"/> </cxf:outInterceptors>
> <cxf:inFaultInterceptors> <ref bean="logOutbound"/>
> </cxf:inFaultInterceptors>
> </cxf:bus>
> <jaxws:endpoint id="helloWorld"
> implementor="demo.spring.HelloWorldImpl" address="/HelloWorld" />
> </beans>
> -----------------------------------------------------------------------------------------------------------------------
> =================HelloWorld.java=======================================
> package demo.spring;
> import javax.jws.WebService;
> import javax.jws.WebMethod;
> import javax.jws.WebParam;
> import javax.jws.WebResult;
> import javax.xml.ws.ResponseWrapper;
> import javax.xml.ws.RequestWrapper;
> import javax.jws.soap.SOAPBinding;
> @WebService(name="MyHelloWorldService",
> targetNamespace="http://nstest.helloworld")
> @SOAPBinding( parameterStyle=SOAPBinding.ParameterStyle.WRAPPED,
> style=SOAPBinding.Style.DOCUMENT,
> use= SOAPBinding.Use.LITERAL )
> public interface HelloWorld {
> @WebMethod
> @WebResult(name="MyResult", targetNamespace="http://nstest.helloworld")
> String sayHi(@WebParam(name="MyInput",
> targetNamespace="http://nstest.helloworld") String text);
> }
> -----------------------------------------------------------------------------------------------------------------------
> =================HelloWorldImpl.java=======================================
> package demo.spring;
> import javax.jws.WebService;
> import javax.jws.soap.SOAPBinding;
> @WebService(endpointInterface = "demo.spring.HelloWorld")
> public class HelloWorldImpl implements HelloWorld {
> public String sayHi(String text) {
> return "Hello " + text;
> }
> }
> -----------------------------------------------------------------------------------------------------------------------
> Create WAR from the above code, deploy to tomcat, here is the WSDL I got from
> http://localhost:8080/...::
> =======main WSDL:
> http://localhost:8080/spring_http/HelloWorld?wsdl=================
> <?xml version="1.0" encoding="utf-8" ?>
> - <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:ns1="http://nstest.helloworld"
> xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:tns="http://spring.demo/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> name="HelloWorldImplService" targetNamespace="http://spring.demo/">
> <wsdl:import
> location="http://localhost:8080/spring_http/HelloWorld?wsdl=MyHelloWorldService.wsdl"
> namespace="http://nstest.helloworld" />
> - <wsdl:binding name="HelloWorldImplServiceSoapBinding"
> type="ns1:MyHelloWorldService">
> <soap:binding style="document"
> transport="http://schemas.xmlsoap.org/soap/http" />
> - <wsdl:operation name="sayHi">
> <soap:operation soapAction="" style="document" />
> - <wsdl:input name="sayHi">
> <soap:body use="literal" />
> </wsdl:input>
> - <wsdl:output name="sayHiResponse">
> <soap:body use="literal" />
> </wsdl:output>
> </wsdl:operation>
> </wsdl:binding>
> - <wsdl:service name="HelloWorldImplService">
> - <wsdl:port binding="tns:HelloWorldImplServiceSoapBinding"
> name="HelloWorldImplPort">
> <soap:address location="http://localhost:8080/spring_http/HelloWorld" />
> </wsdl:port>
> </wsdl:service>
> </wsdl:definitions>
> -----------------------------------------------------------------------------------------------------------------------------------------------
> =====imported WSDL:
> http://localhost:8080/spring_http/HelloWorld?wsdl=MyHelloWorldService.wsdl====
> <?xml version="1.0" encoding="utf-8" ?>
> - <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:ns1="http://nstest.helloworld"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MyHelloWorldService"
> targetNamespace="http://nstest.helloworld">
> - <wsdl:types>
> - <xsd:schema xmlns="http://nstest.helloworld"
> xmlns:tns="http://spring.demo/" attributeFormDefault="unqualified"
> elementFormDefault="unqualified" targetNamespace="http://nstest.helloworld"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema">
> <import xmlns="http://www.w3.org/2001/XMLSchema"
> namespace="http://spring.demo/" />
> <xsd:element name="sayHi" type="sayHi" />
> - <xsd:complexType name="sayHi">
> - <xsd:sequence>
> <xsd:element minOccurs="0" name="MyInput" type="xsd:string" />
> </xsd:sequence>
> </xsd:complexType>
> <xsd:element name="sayHiResponse" type="sayHiResponse" />
> - <xsd:complexType name="sayHiResponse">
> - <xsd:sequence>
> <xsd:element minOccurs="0" name="MyResult" type="xsd:string" />
> </xsd:sequence>
> </xsd:complexType>
> </xsd:schema>
> </wsdl:types>
> - <wsdl:message name="sayHi">
> <wsdl:part element="ns1:sayHi" name="parameters" />
> </wsdl:message>
> - <wsdl:message name="sayHiResponse">
> <wsdl:part element="ns1:sayHiResponse" name="parameters" />
> </wsdl:message>
> - <wsdl:portType name="MyHelloWorldService">
> - <wsdl:operation name="sayHi">
> <wsdl:input message="ns1:sayHi" name="sayHi" />
> <wsdl:output message="ns1:sayHiResponse" name="sayHiResponse" />
> </wsdl:operation>
> </wsdl:portType>
> </wsdl:definitions>
> -------------------------------------------------------------------------------------------------------------------------------------------
> Create client from WSDL by using wsdl2java. The namespaces of input/output
> parameters have already been missing from the generated service interface:
> ================MyHelloWorldService.java (generated by
> wsdl2java)======================
> package helloworld.nstest;
> import javax.jws.WebParam.Mode;
> import javax.jws.WebParam;
> import javax.jws.WebService;
> import javax.jws.soap.SOAPBinding.Style;
> import javax.jws.soap.SOAPBinding;
> import javax.jws.WebMethod;
> import javax.jws.WebResult;
> import javax.xml.ws.RequestWrapper;
> import javax.xml.ws.ResponseWrapper;
> /**
> * This class was generated by Apache CXF (incubator) 2.0.3-incubator
> * Tue Nov 20 22:45:47 EST 2007
> * Generated source version: 2.0.3-incubator
> *
> */
> @WebService(targetNamespace = "http://nstest.helloworld", name =
> "MyHelloWorldService")
> public interface MyHelloWorldService {
> @ResponseWrapper(targetNamespace = "http://nstest.helloworld", className
> = "helloworld.nstest.SayHiResponse", localName = "sayHiResponse")
> @RequestWrapper(targetNamespace = "http://nstest.helloworld", className =
> "helloworld.nstest.SayHi", localName = "sayHi")
> @WebResult(targetNamespace = "", name = "MyResult")
> @WebMethod
> public java.lang.String sayHi(
> @WebParam(targetNamespace = "", name = "MyInput")
> java.lang.String myInput
> );
> }
> ===================================================================
> Modify the generated client:
> ========MyHelloWorldService_HelloWorldImplPort_Client.java (generated by
> wsdl2java)======
> package helloworld.nstest;
> import java.io.File;
> import java.net.MalformedURLException;
> import java.net.URL;
> import javax.xml.namespace.QName;
> import demo.spring.HelloWorldImplService;
> import javax.jws.WebMethod;
> import javax.jws.WebResult;
> import javax.xml.ws.RequestWrapper;
> import javax.xml.ws.ResponseWrapper;
> public final class MyHelloWorldService_HelloWorldImplPort_Client {
> private static final QName SERVICE_NAME = new
> QName("http://spring.demo/", "HelloWorldImplService");
> private MyHelloWorldService_HelloWorldImplPort_Client() {
> }
> public static void main(String args[]) throws Exception {
>
> HelloWorldImplService ss = new HelloWorldImplService();
> MyHelloWorldService port = ss.getHelloWorldImplPort();
> {
> System.out.println("Invoking sayHi...");
> java.lang.String _sayHi_myInput = "ABC";
> java.lang.String _sayHi__return = port.sayHi(_sayHi_myInput);
> System.out.println("sayHi.result=" + _sayHi__return);
> }
> System.exit(0);
> }
> }
> --------------------------------------------------------------------------------------------------------
> SOAP message captured on server-side:
> --------------------------------------
> Encoding: UTF-8
> Headers: {connection=[keep-alive], cache-control=[no-cache],
> host=[localhost:808
> 0], user-agent=[Java/1.5.0_12], transfer-encoding=[chunked],
> pragma=[no-cache],
> content-type=[text/xml; charset=UTF-8], accept=[*], soapaction=[""]}
> Message:
> <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body
> ><ns2:sayHi
> >xmlns:ns2="http://nstest.helloworld"><MyInput>ABC</MyInput></ns2:say
> Hi></soap:Body></soap:Envelope>
> --------------------------------------
> Nov 20, 2007 10:51:13 PM
> org.apache.cxf.interceptor.LoggingOutInterceptor$Loggin
> gCallback onClose
> INFO: Outbound Message:
> --------------------------------------
> <soap:Envelope
> xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body
> ><ns1:sayHiResponse xmlns:ns1="http://nstest.helloworld"><MyResult>Hello
> >ABC</My
> Result></ns1:sayHiResponse></soap:Body></soap:Envelope>-------------------------
> -------------
> You can see that both "MyInput" and "MyResult" have no namespace.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.