This seems like an interesting issue and I was curious about a couple things:
First, I'm wondering why I didn't recreate the error that others noticed. Any ideas? Next, I was wondering what implications there are here. I'm not 100% sure but I'm guessing in the bottom-up case, without the Java wrapper we would do child-to-child data transform instead of wrapper-to-wrapper (in spite of the fact that the WSDL we gen is wrapped). So does this imply that we always need the Java wrappers to deserialize XML in the elementFormDefault=qualified style? This doesn't seem too burdensome for the user, just trying to understand... Scott On Sat, Jun 21, 2008 at 2:03 AM, Raymond Feng (JIRA) <dev@tuscany.apache.org> wrote: > > [ > https://issues.apache.org/jira/browse/TUSCANY-2388?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel] > > Raymond Feng resolved TUSCANY-2388. > ----------------------------------- > > Resolution: Fixed > > I confirmed it's now fixed by r670103. > > > Data binding does not work when Java interface & implementation (where > method param is not String, primitive) exposed with a web services binding > > > -------------------------------------------------------------------------------------------------------------------------------------------------- > > > > Key: TUSCANY-2388 > > URL: https://issues.apache.org/jira/browse/TUSCANY-2388 > > Project: Tuscany > > Issue Type: Bug > > Components: Java SCA Data Binding Runtime > > Affects Versions: Java-SCA-1.1 > > Environment: Windows XP; IBM J2RE 1.5.0 (Build 2.3) > > Reporter: Peter Kemp > > Assignee: Raymond Feng > > Attachments: testcase.zip > > > > > > 1. Create a component with a java implementation, with a service defined > by a Java interface. > > The parameter to the method is not a String, primitive or wrapper - > rather, it's a class containing a couple of Strings and an Integer. > > 2. Expose the service with a webservice binding. > > 3. Deploy the composite (as a WAR or embedded). > > 4. Retrieve the WSDL for the service (eg from > http://localhost:8080/SomeServices?wsdl). > > 5. Generate a web service request from the WSDL. > > The runtime fails to map the web service request message to the > implementation class method parameters - it calls the correct method, but > the method parameter is null. > > The test works fine when the parameter is a String. > > Composite definition (some.composite): > > ------------------------------------------------------- > > <?xml version="1.0" encoding="UTF-8"?> > > <composite xmlns="http://www.osoa.org/xmlns/sca/1.0" targetNamespace=" > http://test" xmlns:test="http://test" name="some"> > > <service name="SomeServices" promote="SomeServicesComponent"> > > <binding.ws uri="http://localhost:8080/SomeServices"/> > > </service> > > <component name="SomeServicesComponent"> > > <implementation.java class="service.SomeServiceImpl"/> > > <service name="SomeService"> > > <interface.java interface="service.SomeService" /> > > </service> > > </component> > > </composite> > > Service interface: > > ----------------------- > > /** > > * > > */ > > package service; > > import org.osoa.sca.annotations.Remotable; > > @Remotable > > public interface SomeService { > > > > public AnObject getUsingString(String stringParam); > > public AnObject getUsingMoreComplexObject(MoreComplexObject > moreComplexParam); > > > > } > > Implementation: > > ---------------------- > > 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) { > > // TODO Auto-generated method stub > > return new AnObject(stringParam + "123", 123); > > } > > public AnObject getUsingMoreComplexObject(MoreComplexObject > moreComplexParam) { > > System.out.println("Param value:" + > moreComplexParam.getStringParam()); > > > > return getAnObject(moreComplexParam.getStringParam()); > > } > > > > } > > MoreComplexObject.java > > ----------------------------------- > > /** > > * > > */ > > package service; > > import java.io.Serializable; > > public class MoreComplexObject implements Serializable{ > > private static final long serialVersionUID = 43242314234123L; > > private String stringParam; > > private Integer intParam; > > private String stringParam2; > > public String getStringParam() { > > return stringParam; > > } > > public void setStringParam(String stringParam) { > > this.stringParam = stringParam; > > } > > public Integer getIntParam() { > > return intParam; > > } > > public void setIntParam(Integer intParam) { > > this.intParam = intParam; > > } > > public String getStringParam2() { > > return stringParam2; > > } > > public void setStringParam2(String stringParam2) { > > this.stringParam2 = stringParam2; > > } > > > > } > > AnObject.java > > ------------- > > package service; > > public class AnObject { > > private String someRetValue; > > private Integer someOtherRetValue; > > > > public AnObject() { > > } > > public AnObject(String someRetValue, Integer someOtherRetValue) { > > this.someRetValue = someRetValue; > > this.someOtherRetValue = someOtherRetValue; > > } > > /** > > * @return the someOtherRetValue > > */ > > public Integer getSomeOtherRetValue() { > > return someOtherRetValue; > > } > > /** > > * @param someOtherRetValue the someOtherRetValue to set > > */ > > public void setSomeOtherRetValue(Integer someOtherRetValue) { > > this.someOtherRetValue = someOtherRetValue; > > } > > /** > > * @return the someRetValue > > */ > > public String getSomeRetValue() { > > return someRetValue; > > } > > /** > > * @param someRetValue the someRetValue to set > > */ > > public void setSomeRetValue(String someRetValue) { > > this.someRetValue = someRetValue; > > } > > > > > > } > > WSDL returned by http://localhost:8080/SomeServices?wsdl > > > ------------------------------------------------------------------------------------------- > > <?xml version="1.0" encoding="UTF-8"?> > > <wsdl:definitions targetNamespace="http://service" xmlns:soap12=" > http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soap=" > http://schemas.xmlsoap.org/wsdl/soap/" xmlns:mime=" > http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xs=" > http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://service/xsd" > xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:http=" > http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsaw=" > http://www.w3.org/2006/05/addressing/wsdl" xmlns:ns1="http://service"> > > <wsdl:types> > > <xs:schema attributeFormDefault="qualified" > elementFormDefault="qualified" targetNamespace="http://service/xsd" > xmlns:ax21="http://service/xsd"> > > <xs:complexType name="MoreComplexObject"> > > <xs:sequence> > > <xs:element minOccurs="0" name="intParam" nillable="true" > type="xs:int"/> > > <xs:element minOccurs="0" name="stringParam" > nillable="true" type="xs:string"/> > > <xs:element minOccurs="0" name="stringParam2" > nillable="true" type="xs:string"/> > > </xs:sequence> > > </xs:complexType> > > <xs:complexType name="AnObject"> > > <xs:sequence> > > <xs:element minOccurs="0" name="someOtherRetValue" > nillable="true" type="xs:int"/> > > <xs:element minOccurs="0" name="someRetValue" > nillable="true" type="xs:string"/> > > </xs:sequence> > > </xs:complexType> > > </xs:schema> > > <xs:schema attributeFormDefault="qualified" > elementFormDefault="qualified" targetNamespace="http://service" xmlns:ns=" > http://service"> > > <xs:element name="getUsingMoreComplexObject"> > > <xs:complexType> > > <xs:sequence> > > <xs:element minOccurs="0" name="param0" nillable="true" > type="ns0:MoreComplexObject"/> > > </xs:sequence> > > </xs:complexType> > > </xs:element> > > <xs:element name="getUsingMoreComplexObjectResponse"> > > <xs:complexType> > > <xs:sequence> > > <xs:element minOccurs="0" name="return" nillable="true" > type="ns0:AnObject"/> > > </xs:sequence> > > </xs:complexType> > > </xs:element> > > <xs:element name="getUsingString"> > > <xs:complexType> > > <xs:sequence> > > <xs:element minOccurs="0" name="param0" nillable="true" > type="xs:string"/> > > </xs:sequence> > > </xs:complexType> > > </xs:element> > > <xs:element name="getUsingStringResponse"> > > <xs:complexType> > > <xs:sequence> > > <xs:element minOccurs="0" name="return" nillable="true" > type="ns0:AnObject"/> > > </xs:sequence> > > </xs:complexType> > > </xs:element> > > </xs:schema> > > </wsdl:types> > > <wsdl:message name="getUsingStringResponse"> > > <wsdl:part name="parameters" element="ns1:getUsingStringResponse"> > > </wsdl:part> > > </wsdl:message> > > <wsdl:message name="getUsingMoreComplexObjectResponse"> > > <wsdl:part name="parameters" > element="ns1:getUsingMoreComplexObjectResponse"> > > </wsdl:part> > > </wsdl:message> > > <wsdl:message name="getUsingStringRequest"> > > <wsdl:part name="parameters" element="ns1:getUsingString"> > > </wsdl:part> > > </wsdl:message> > > <wsdl:message name="getUsingMoreComplexObjectRequest"> > > <wsdl:part name="parameters" element="ns1:getUsingMoreComplexObject"> > > </wsdl:part> > > </wsdl:message> > > <wsdl:portType name="SomeServicePortType"> > > <wsdl:operation name="getUsingString"> > > <wsdl:input message="ns1:getUsingStringRequest" > wsaw:Action="urn:getUsingString"> > > </wsdl:input> > > <wsdl:output message="ns1:getUsingStringResponse" > wsaw:Action="urn:getUsingStringResponse"> > > </wsdl:output> > > </wsdl:operation> > > <wsdl:operation name="getUsingMoreComplexObject"> > > <wsdl:input message="ns1:getUsingMoreComplexObjectRequest" > wsaw:Action="urn:getUsingMoreComplexObject"> > > </wsdl:input> > > <wsdl:output message="ns1:getUsingMoreComplexObjectResponse" > wsaw:Action="urn:getUsingMoreComplexObjectResponse"> > > </wsdl:output> > > </wsdl:operation> > > </wsdl:portType> > > <wsdl:binding name="SomeServiceHttpBinding" > type="ns1:SomeServicePortType"> > > <http:binding verb="POST"/> > > <wsdl:operation name="getUsingString"> > > <http:operation location="SomeService/getUsingString"/> > > <wsdl:input> > > <mime:content part="getUsingString" type="text/xml"/> > > </wsdl:input> > > <wsdl:output> > > <mime:content part="getUsingString" type="text/xml"/> > > </wsdl:output> > > </wsdl:operation> > > <wsdl:operation name="getUsingMoreComplexObject"> > > <http:operation location="SomeService/getUsingMoreComplexObject"/> > > <wsdl:input> > > <mime:content part="getUsingMoreComplexObject" type="text/xml"/> > > </wsdl:input> > > <wsdl:output> > > <mime:content part="getUsingMoreComplexObject" type="text/xml"/> > > </wsdl:output> > > </wsdl:operation> > > </wsdl:binding> > > <wsdl:binding name="SomeServiceSOAP11Binding" > type="ns1:SomeServicePortType"> > > <soap:binding style="document" transport=" > http://schemas.xmlsoap.org/soap/http"/> > > <wsdl:operation name="getUsingString"> > > <soap:operation soapAction="urn:getUsingString" style="document"/> > > <wsdl:input> > > <soap:body use="literal"/> > > </wsdl:input> > > <wsdl:output> > > <soap:body use="literal"/> > > </wsdl:output> > > </wsdl:operation> > > <wsdl:operation name="getUsingMoreComplexObject"> > > <soap:operation soapAction="urn:getUsingMoreComplexObject" > style="document"/> > > <wsdl:input> > > <soap:body use="literal"/> > > </wsdl:input> > > <wsdl:output> > > <soap:body use="literal"/> > > </wsdl:output> > > </wsdl:operation> > > </wsdl:binding> > > <wsdl:binding name="SomeServicePortType__SOAPBinding" > type="ns1:SomeServicePortType"> > > <soap:binding style="document" transport=" > http://schemas.xmlsoap.org/soap/http"/> > > <wsdl:operation name="getUsingString"> > > <soap:operation soapAction=""/> > > <wsdl:input> > > <soap:body use="literal"/> > > </wsdl:input> > > <wsdl:output> > > <soap:body use="literal"/> > > </wsdl:output> > > </wsdl:operation> > > <wsdl:operation name="getUsingMoreComplexObject"> > > <soap:operation soapAction=""/> > > <wsdl:input> > > <soap:body use="literal"/> > > </wsdl:input> > > <wsdl:output> > > <soap:body use="literal"/> > > </wsdl:output> > > </wsdl:operation> > > </wsdl:binding> > > <wsdl:service name="SomeService"> > > <wsdl:port name="SomeServiceHttpport" > binding="ns1:SomeServiceHttpBinding"> > > <http:address location="http://localhost:8080/SomeServices"/> > > </wsdl:port> > > <wsdl:port name="SomeServiceSOAP11port_http" > binding="ns1:SomeServiceSOAP11Binding"> > > <soap:address location="http://localhost:8080/SomeServices"/> > > </wsdl:port> > > </wsdl:service> > > <wsdl:service name="SomeServicePortType__Service"> > > <wsdl:port name="SomeServicePortType__SOAPHTTPPort" > binding="ns1:SomeServicePortType__SOAPBinding"> > > <soap:address location="http://localhost:8080/SomeServices"/> > > </wsdl:port> > > </wsdl:service> > > </wsdl:definitions> > > SOAP payload: > > -------------------- > > <soapenv:Envelope xmlns:soapenv=" > http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service" > xmlns:xsd="http://service/xsd"> > > <soapenv:Header/> > > <soapenv:Body> > > <ser:getUsingMoreComplexObject> > > <ser:param0> > > <xsd:intParam>12</xsd:intParam> > > <xsd:stringParam>Param_1</xsd:stringParam> > > <xsd:stringParam2>Param2</xsd:stringParam2> > > </ser:param0> > > </ser:getUsingMoreComplexObject> > > </soapenv:Body> > > </soapenv:Envelope> > > -- > This message is automatically generated by JIRA. > - > You can reply to this email to add a comment to the issue online. > >