On the setReturnType method, you want to specify just the XML type.
Don't specify the Java type it maps to:

               call.setReturnType(complexTypeQName);

Anne

On Dec 27, 2007 8:23 AM, Sergey Bykov <[EMAIL PROTECTED]> wrote:
>
> <deployment
>     xmlns="http://xml.apache.org/axis/wsdd/";
>     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java";>
>
>   <!-- Services from IArrayService WSDL service -->
>
>   <service name="ArrayService" provider="java:RPC" style="wrapped"
> use="literal">
>       <parameter name="wsdlTargetNamespace" value="http://service"/>
>       <parameter name="wsdlServiceElement" value="IArrayService"/>
>       <parameter name="schemaQualified" value="http://service"/>
>       <parameter name="wsdlServicePort" value="ArrayService"/>
>       <parameter name="className"
> value="service.ArrayServiceSoapBindingSkeleton"/>
>       <parameter name="wsdlPortType" value="IArray"/>
>       <parameter name="typeMappingVersion" value="1.2"/>
>       <parameter name="allowedMethods" value="*"/>
>
>       <typeMapping
>         xmlns:ns="http://service";
>         qname="ns:ComplexType"
>         type="java:service.ComplexType"
>         serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
>         deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
>         encodingStyle=""
>       />
>   </service>
> </deployment>
>
> This wsdd was automatically created by axis. I user the following ant build
> file:
> <project name="axis" default="all" basedir=".">
>         <property name="axis.home" value="C:\Program
> Files\apache-tomcat-5.5.25\webapps\axis"/>
>         <property name="array-service-wsdl" value="ArrayService.wsdl"/>
>         <path id="axis.classpath">
>                 <fileset dir="${axis.home}/WEB-INF/lib">
>                         <include name="**/*.jar" />
>                 </fileset>
>     </path>
>         <taskdef resource="axis-tasks.properties" 
> classpathref="axis.classpath" />
>
>         <!-- =================================
>         target: all
>         ================================= -->
>         <target name="all"
> depends="clean,init,java2wsdl,wsdl2java,patch,compile,deploy"
> description="All">
>         </target>
>
>     <target name="init" description="Prepare infrastructure for building">
>         <mkdir dir="bin" />
>     </target>
>
>         <target name="java2wsdl" description="Create WSDL">
>         <javac srcdir="src" destdir="bin" includes="service/IArray.java"
> debug="on" source="1.6" />
>         <axis-java2wsdl
>                         output="bin\${array-service-wsdl}"
>                         
> location="http://localhost:8080/axis/services/ArrayService";
>                         namespace="http://service";
>                         methods="method"
>             style="WRAPPED"
>             classname="service.IArray">
>                         <classpath>
>                                 <pathelement path="bin"/>
>                         </classpath>
>                 </axis-java2wsdl>
>     </target>
>
>         <target name="wsdl2java" description="Generate source files">
>                 <axis-wsdl2java
>                         verbose="true"
>                         serverside="true"
>                         skeletondeploy="true"
>             all="true"
>                         output="bin"
>             testcase="false"
>             url="bin\${array-service-wsdl}" >
>                         <mapping
>                                 namespace="http://service";
>                                 package="service" />
>                 </axis-wsdl2java>
>     </target>
>
>         <!-- =================================
>         target: patch
>         ================================= -->
>         <target name="patch" description="Patching source files">
>                 <copy file="src/service/ArrayService.java"
> tofile="bin/service/ArrayServiceSoapBindingImpl.java" overwrite="true"
> verbose="true"/>
>         <replace file="bin/service/ArrayServiceSoapBindingImpl.java"
> token="ArrayService" value="ArrayServiceSoapBindingImpl" />
>         <copy todir="bin">
>             <fileset dir="src">
>                 <include name="**/*.java" />
>             </fileset>
>         </copy>
>     </target>
>
>         <target name="compile" description="Compile everything">
>                 <javac srcdir="bin" destdir="bin" debug="on" source="1.6"
> classpathref="axis.classpath"/>
>         </target>
>
>         <target name="deploy" depends="undeploy" description="Deploy 
> everything">
>                 <copy todir="${axis.home}\WEB-INF\classes\service">
>                         <fileset dir="bin\service">
>                 <include name="**/*.class" />
>             </fileset>
>         </copy>
>                 <axis-admin
>                         hostname="localhost"
>                         port="8080"
>                         servletpath="axis/services/AdminService"
>             xmlfile="bin\service\deploy.wsdd">
>                 </axis-admin>
>     </target>
>
>         <target name="undeploy" description="Undeploy everything">
>                 <axis-admin
>                         hostname="localhost"
>                         port="8080"
>                         servletpath="axis/services/AdminService"
>                         xmlfile="bin\service\undeploy.wsdd">
>                 </axis-admin>
>         <delete dir="${axis.home}\WEB-INF\classes\service"/>
>         </target>
>
>         <target name="clean" description="Clean everything">
>         <delete dir="bin"/>
>     </target>
> </project>
>
>
> Anne Thomas Manes wrote:
> >
> > Please provide your WSDD.
> >
> > Anne
> >
> > On Dec 27, 2007 8:02 AM, Sergey Bykov <[EMAIL PROTECTED]> wrote:
> >>
> >> 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]
> >>
> >>
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
>
> --
> View this message in context: 
> http://www.nabble.com/Return-complex-type-in-wrapped-literal-style.-tp14512578p14513008.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]
>
>

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

Reply via email to