You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Benson Margulies (JIRA)" <ji...@apache.org> on 2007/12/15 02:02:43 UTC

[jira] Assigned: (CXF-1226) elementFormDefault from package-info.java ignored with JAXWS+JAXB when there are no beans

     [ https://issues.apache.org/jira/browse/CXF-1226?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Benson Margulies reassigned CXF-1226:
-------------------------------------

    Assignee: Daniel Kulp  (was: Benson Margulies)

Dan, if this is legit, please send it back to me. If this is just how life is with these dueling standards, let's close this out (and encourage the use of doc/bare?).

> elementFormDefault from package-info.java ignored with JAXWS+JAXB when there are no beans
> -----------------------------------------------------------------------------------------
>
>                 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: Daniel Kulp
>             Fix For: 2.0.4
>
>
> 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.