Anonymous | Login | Signup for a new account | 12-17-2024 08:35 PST |
Main | My View | View Issues | Change Log | Docs |
Viewing Issue Simple Details [ Jump to Notes ] | [ View Advanced ] [ Issue History ] [ Print ] | ||||||||
ID | Category | Severity | Reproducibility | Date Submitted | Last Update | ||||
0001852 | [Resin] | major | always | 07-05-07 11:11 | 09-04-07 11:56 | ||||
Reporter | djulian | View Status | public | ||||||
Assigned To | |||||||||
Priority | normal | Resolution | fixed | ||||||
Status | closed | Product Version | 3.1.1 | ||||||
Summary | 0001852: Web Service schema generation neglects to add namespace to nested types | ||||||||
Description |
Given a web service endpoint (GreekEndpoint) that has a method that returns a bean (AlphaBean) that in turn contains a bean (BetaBean), the schema produced by Resin 3.1.1 fails to put the nested bean in the proper namespace. In a sample project, the generated Resin schema looks like so: <xsd:schema version="1.0" targetNamespace="http://ws.example.com/" [^] xmlns:m="http://ws.example.com/"> [^] <xsd:complexType name="alphaBean"> <xsd:sequence> <!-- NOTE: type="betaBean" --> <xsd:element minOccurs="0" type="betaBean" name="beta"/> <xsd:element minOccurs="0" type="xsd:string" name="value"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="betaBean"> <xsd:sequence> <xsd:element minOccurs="0" type="xsd:string" name="value"/> </xsd:sequence> </xsd:complexType> <xsd:element name="getAlphaBean" type="m:getAlphaBean"/> <xsd:complexType name="getAlphaBean"/> <xsd:element name="getAlphaBeanResponse" type="m:getAlphaBeanResponse"/> <xsd:complexType name="getAlphaBeanResponse"> <xsd:sequence> <xsd:element name="return" type="m:alphaBean" minOccurs="0"/> </xsd:sequence> </xsd:complexType> <xsd:element name="getTime" type="m:getTime"/> <xsd:complexType name="getTime"/> <xsd:element name="getTimeResponse" type="m:getTimeResponse"/> <xsd:complexType name="getTimeResponse"> <xsd:sequence> <xsd:element name="return" type="xsd:string" minOccurs="0"/> </xsd:sequence> </xsd:complexType> </xsd:schema> However, the schema generated via wsgen: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xs:schema version="1.0" targetNamespace="http://ws.example.com/" [^] xmlns:tns="http://ws.example.com/" [^] xmlns:xs="http://www.w3.org/2001/XMLSchema"> [^] <xs:element name="getAlphaBean" type="tns:getAlphaBean"/> <xs:element name="getAlphaBeanResponse" type="tns:getAlphaBeanResponse"/> <xs:complexType name="getAlphaBean"/> <xs:complexType name="getAlphaBeanResponse"> <xs:sequence> <xs:element name="return" type="tns:alphaBean" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="alphaBean"> <xs:sequence> <!-- NOTE: type="tns:betaBean" ---> <xs:element name="beta" type="tns:betaBean" minOccurs="0"/> <xs:element name="value" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> <xs:complexType name="betaBean"> <xs:sequence> <xs:element name="value" type="xs:string" minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:schema> The wsgen schema places the 'betaBean' type in the namespace of the service while Resin's generated schema leaves it to the default namespace of the containing WSDL, http://schemas.xmlsoap.org/wsdl/. [^] This is reflected in clients that try to consume this WSDL. SoapUI says: "Thu Jul 05 10:39:19 PDT 2007:WARN:Error: http://localhost:8080/greek/Greek?wsdl:0: [^] error: src-resolve.a: Could not find type 'betaBean@http://schemas.xmlsoap.org/wsdl/'. [^] Do you mean to refer to the type named betaBean@ href="http://ws.example.com/">http://ws.example.com/ [^] (in Greek_3Fwsdl)?" Apache Axis 1.4 WSDL2Java says: "java.io.IOException: Type {http://schemas.xmlsoap.org/wsdl/}betaBean [^] is referenced but not defined." |
||||||||
Additional Information |
I am using "Resin-3.1.1 (built Mon, 07 May 2007 09:32:40 PDT)" with JDK 1.6.0_01. Here is a sample project that illustrates this issue (all files are likewise contained in attached zip file): --- resin-web.xml --- <web-app xmlns="http://caucho.com/ns/resin"> [^] <servlet-mapping url-pattern="/Greek" servlet-class="com.example.ws.GreekEndpoint"> <protocol type="soap" separate-schema="false" /> </servlet-mapping> </web-app> --- GreekEndpoint.java --- package com.example.ws; import java.util.Date; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class GreekEndpoint { public String getTime() { return new Date().toString(); } @WebMethod public AlphaBean getAlphaBean() { BetaBean beta = new BetaBean(); beta.setValue("beta"); AlphaBean alpha = new AlphaBean(); alpha.setValue("alpha"); alpha.setBeta(beta); return alpha; } } --- AlphaBean.java --- package com.example.ws; public class AlphaBean { private String value; private BetaBean beta; public String getValue() { return this.value; } public void setValue(String value) { this.value = value; } public BetaBean getBeta() { return this.beta; } public void setBeta(BetaBean beta) { this.beta = beta; } } --- BetaBean.java --- package com.example.ws; public class BetaBean { private String value; public String getValue() { return this.value; } public void setValue(String value) { this.value = value; } } |
||||||||
Attached Files | greek.zip [^] (3,209 bytes) 07-05-07 11:11 | ||||||||
|
Mantis 1.0.0rc3[^]
Copyright © 2000 - 2005 Mantis Group
33 total queries executed. 27 unique queries executed. |