You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "Simon Laws (JIRA)" <de...@tuscany.apache.org> on 2009/10/06 16:43:31 UTC

[jira] Updated: (TUSCANY-3283) Generated WSDL not WS-I compliant in some cases

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

Simon Laws updated TUSCANY-3283:
--------------------------------

    Fix Version/s: Java-SCA-1.5.2

Didn't get this ready for 1.5.1 but I'd like to get it out so moving to 1.5.2

> Generated WSDL not WS-I compliant in some cases
> -----------------------------------------------
>
>                 Key: TUSCANY-3283
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-3283
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SCA Axis Binding Extension
>    Affects Versions: Java-SCA-1.5.1
>         Environment: All
>            Reporter: Simon Laws
>            Assignee: Simon Laws
>             Fix For: Java-SCA-1.5.2
>
>
> Discussed here - http://www.mail-archive.com/dev%40tuscany.apache.org/msg09543.html
> For an interface such as..
> package service;
> import org.osoa.sca.annotations.Service;
> @Service(SomeService.class)
> public class SomeServiceImpl implements SomeService {
>    public AnObject getUsingString(String stringParam) {
>        System.out.println("Param value:" + stringParam);
>        return getAnObject(stringParam);
>    }
>    private AnObject getAnObject(String stringParam) {
>        return new AnObject(stringParam + "123", 123);
>    }
>    public AnObject getUsingMoreComplexObject(MoreComplexObject
> moreComplexParam) {
>        System.out.println("Param value:" + moreComplexParam.getStringParam());
>        return getAnObject(moreComplexParam.getStringParam());
>    }
> }
> Tuscany generates the WSDL types...
> <?xml version="1.0" encoding="UTF-8"?>
> <wsdl:definitions name="SomeServiceService"
>        targetNamespace="http://service/" xmlns:tns="http://service/"
>        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
>        xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/"
> xmlns:SOAP11="http://schemas.xmlsoap.org/wsdl/soap/">
>        <wsdl:types>
>                <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
>                        <xs:complexType name="anObject">
>                                <xs:sequence>
>                                        <xs:element minOccurs="0" name="someOtherRetValue" type="xs:int" />
>                                        <xs:element minOccurs="0" name="someRetValue" type="xs:string" />
>                                </xs:sequence>
>                        </xs:complexType>
>                        <xs:complexType name="moreComplexObject">
>                                <xs:sequence>
>                                        <xs:element minOccurs="0" name="intParam" type="xs:int" />
>                                        <xs:element minOccurs="0" name="stringParam" type="xs:string" />
>                                        <xs:element minOccurs="0" name="stringParam2" type="xs:string" />
>                                </xs:sequence>
>                        </xs:complexType>
>                </xs:schema>
>                <xs:schema attributeFormDefault="qualified"
>                        elementFormDefault="unqualified" targetNamespace="http://service/"
>                        xmlns:xs="http://www.w3.org/2001/XMLSchema">
>                        <xs:import />
>                        <xs:element name="getUsingString">
>                                <xs:complexType>
>                                        <xs:sequence>
>                                                <xs:element minOccurs="0" name="arg0" nillable="true"
>                                                        type="xs:string" />
>                                        </xs:sequence>
>                                </xs:complexType>
>                        </xs:element>
>                        <xs:element name="getUsingMoreComplexObjectResponse">
>                                <xs:complexType>
>                                        <xs:sequence>
>                                                <xs:element minOccurs="0" name="return" nillable="true"
>                                                        type="anObject" />
>                                        </xs:sequence>
>                                </xs:complexType>
>                        </xs:element>
>                        <xs:element name="getUsingMoreComplexObject">
>                                <xs:complexType>
>                                        <xs:sequence>
>                                                <xs:element minOccurs="0" name="arg0" nillable="true"
>                                                        type="moreComplexObject" />
>                                        </xs:sequence>
>                                </xs:complexType>
>                        </xs:element>
>                        <xs:element name="getUsingStringResponse">
>                                <xs:complexType>
>                                        <xs:sequence>
>                                                <xs:element minOccurs="0" name="return" nillable="true"
>                                                        type="anObject" />
>                                        </xs:sequence>
>                                </xs:complexType>
>                        </xs:element>
>                </xs:schema>
>        </wsdl:types>
> However the wsgen JAXWS tooling generates the following schema for the WSDL...
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <xs:schema version="1.0" targetNamespace="http://service/"
> xmlns:tns="http://service/"
> xmlns:xs="http://www.w3.org/2001/XMLSchema">
>  <xs:element name="getUsingMoreComplexObject"
> type="tns:getUsingMoreComplexObject"/>
>  <xs:element name="getUsingMoreComplexObjectResponse"
> type="tns:getUsingMoreComplexObjectResponse"/>
>  <xs:element name="getUsingString" type="tns:getUsingString"/>
>  <xs:element name="getUsingStringResponse" type="tns:getUsingStringResponse"/>
>  <xs:complexType name="getUsingMoreComplexObject">
>    <xs:sequence>
>      <xs:element name="arg0" type="tns:moreComplexObject" minOccurs="0"/>
>    </xs:sequence>
>  </xs:complexType>
>  <xs:complexType name="moreComplexObject">
>    <xs:sequence>
>      <xs:element name="intParam" type="xs:int" minOccurs="0"/>
>      <xs:element name="stringParam" type="xs:string" minOccurs="0"/>
>      <xs:element name="stringParam2" type="xs:string" minOccurs="0"/>
>    </xs:sequence>
>  </xs:complexType>
>  <xs:complexType name="getUsingMoreComplexObjectResponse">
>    <xs:sequence>
>      <xs:element name="return" type="tns:anObject" minOccurs="0"/>
>    </xs:sequence>
>  </xs:complexType>
>  <xs:complexType name="anObject">
>    <xs:sequence>
>      <xs:element name="someOtherRetValue" type="xs:int" minOccurs="0"/>
>      <xs:element name="someRetValue" type="xs:string" minOccurs="0"/>
>    </xs:sequence>
>  </xs:complexType>
>  <xs:complexType name="getUsingString">
>    <xs:sequence>
>      <xs:element name="arg0" type="xs:string" minOccurs="0"/>
>    </xs:sequence>
>  </xs:complexType>
>  <xs:complexType name="getUsingStringResponse">
>    <xs:sequence>
>      <xs:element name="return" type="tns:anObject" minOccurs="0"/>
>    </xs:sequence>
>  </xs:complexType>
> </xs:schema>
> Note that difference is that the schema types anObject and
> moreComplexObject  are generated into a namespace for wsgen and not
> for Tuscany.
> Now looking back at various related specs...
> WS-I [1] says...
> R2105 All xsd:schema elements contained in a wsdl:types element of a
> DESCRIPTION MUST have a targetNamespace attribute with a valid and
> non-null value, UNLESS the xsd:schema element has xsd:import and/or
> xsd:annotation as its only child element(s)
> And JAX-WS 2.1 I believe is intended to be WS-I compliant.
> The wrinkle then seems to be that the JAXB spec defines a default Java
> to XSD mapping where types are not placed in a namespace unless you
> configure the Java class with annotations. The spec does talk of
> "customizations" and I guess this is what the wsgen tool is doing but
> I can't find any explicit statement about what these customizations
> might be other than those provided by code annotations. This page [3]
> suggests that it's sneaking behind the public JAXB API to make this
> happen.
> I found that the subject of the JAXB mapping had been discussed
> before, e.g. [2], and I do remember testing that the no namespace
> schema inclusion was actually valid. However I can't put my finger on
> anything to do with customizing the mapping that has been discussed
> here and why we aren't doing it.
> Anyone know how to get JAXB to generate schema that are WS-I compliant
> in this case?
> I note that Axis have witten their own generator but I remember a long
> time ago we used the Axis code and the stopped using it in favour of
> the JAXB code for some reason. Anyone remember why (am searching the
> ML also of course).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.