I built a very simple test service the main goal is to return my custom bean
as a result in wrapped/literal style. 
This is service:
IArray.java

package service;

public interface IArray {
    public ComplexType method();
}

ArrayService.java

package service;

public class ArrayService implements IArray{
    public ComplexType method(){
        ComplexType complexType = new ComplexType();
        complexType.setProp1("value21");
        complexType.setProp2("value22");
        return complexType;
    }
}

This is complex type definition:
ComplexType.java

package service;

public class ComplexType {
    private String prop1;
    private String prop2;

    public String getProp1() {
        return prop1;
    }

    public void setProp1(String prop1) {
        this.prop1 = prop1;
    }

    public String getProp2() {
        return prop2;
    }

    public void setProp2(String prop2) {
        this.prop2 = prop2;
    }
}
WSDL on the server:

  <?xml version="1.0" encoding="UTF-8" ?> 
- <wsdl:definitions targetNamespace="http://service";
xmlns:apachesoap="http://xml.apache.org/xml-soap";
xmlns:impl="http://service"; xmlns:intf="http://service";
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
- <!-- 
WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)

  --> 
- <wsdl:types>
- <schema elementFormDefault="qualified" targetNamespace="http://service";
xmlns="http://www.w3.org/2001/XMLSchema";>
- <element name="method">
  <complexType /> 
  </element>
- <element name="methodResponse">
- <complexType>
- <sequence>
  <element name="methodReturn" type="impl:ComplexType" /> 
  </sequence>
  </complexType>
  </element>
- <complexType name="ComplexType">
- <sequence>
  <element name="prop1" nillable="true" type="xsd:string" /> 
  <element name="prop2" nillable="true" type="xsd:string" /> 
  </sequence>
  </complexType>
  </schema>
  </wsdl:types>
- <wsdl:message name="methodRequest">
  <wsdl:part element="impl:method" name="parameters" /> 
  </wsdl:message>
- <wsdl:message name="methodResponse">
  <wsdl:part element="impl:methodResponse" name="parameters" /> 
  </wsdl:message>
- <wsdl:portType name="IArray">
- <wsdl:operation name="method">
  <wsdl:input message="impl:methodRequest" name="methodRequest" /> 
  <wsdl:output message="impl:methodResponse" name="methodResponse" /> 
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="ArrayServiceSoapBinding" type="impl:IArray">
  <wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"; /> 
- <wsdl:operation name="method">
  <wsdlsoap:operation soapAction="" /> 
- <wsdl:input name="methodRequest">
  <wsdlsoap:body use="literal" /> 
  </wsdl:input>
- <wsdl:output name="methodResponse">
  <wsdlsoap:body use="literal" /> 
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="IArrayService">
- <wsdl:port binding="impl:ArrayServiceSoapBinding" name="ArrayService">
  <wsdlsoap:address
location="http://localhost:8080/axis/services/ArrayService"; /> 
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>
And here is client:
Client.java

package client;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
import org.apache.axis.encoding.ser.ArraySerializerFactory;
import service.ComplexType;

import javax.xml.namespace.QName;
import java.util.ArrayList;

public class Client {

    public static void main(String[] args){
        try {
            Service service = new Service();
            Call call = (Call) service.createCall();
           
call.setTargetEndpointAddress("http://localhost:8080/axis/services/ArrayService";);
            call.setOperationName("method");
            QName complexTypeQName = new
QName("http://service","ComplexType";);
            call.registerTypeMapping(ComplexType.class,
                                     complexTypeQName,
                                     new
org.apache.axis.encoding.ser.BeanSerializerFactory 
(ComplexType.class,complexTypeQName),
                                     new
org.apache.axis.encoding.ser.BeanDeserializerFactory(ComplexType.class,complexTypeQName));
            call.setOperationStyle("wrapped");
            call.setOperationUse("literal");
            call.setReturnType(complexTypeQName, ComplexType.class);
            ComplexType complexType = (ComplexType) call.invoke(new
Object[0]);
       }
       catch (Exception e) {
            e.printStackTrace();
        }

    }
}

This service is extreamly simple, but I got the following problem: axis
client can't parse result correctly. I get the following SOAP response:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
  <soapenv:Body>
    <methodResponse xmlns="">
      <ns1:methodReturn xmlns:ns1="http://service";>
        <ns1:prop1>value21</ns1:prop1>
        <ns1:prop2>value22</ns1:prop2>
      </ns1:methodReturn>
    </methodResponse>
  </soapenv:Body>
</soapenv:Envelope>
and during parsing this complex type axis throws exeption:
org.xml.sax.SAXException: Deserializing parameter 'methodReturn':  could not
find deserializer for type {http://service}ComplexType
        at org.apache.axis.message.RPCHandler.onStartChild(RPCHandler.java:277)
        at
org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
        at
org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
        at
org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
        at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
        at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
        at org.apache.axis.client.Call.invoke(Call.java:2467)
        at org.apache.axis.client.Call.invoke(Call.java:2366)
        at org.apache.axis.client.Call.invoke(Call.java:1812)
        at client.Client.main(Client.java:34)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)

What is missed in this simple scenario? (Also, if I change the style to rpc
everything becomes working)


-- 
View this message in context: 
http://www.nabble.com/Return-complex-type-in-wrapped-literal-style.-tp14512578p14512578.html
Sent from the Axis - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to