Hi,
I am new in Axis and web services and I am facing a problem with the client implementation of a webservice that I can not solve.
 
I have my own bean as follows:
-----------------------------------------------
public class MyStruct {
private String a;
private String b;
 
public String geta(){return a;}
public String getb(){return b;}
public void seta(String na){a=na;}
public void setb(String nb){b=nb;}
}
--------------------------------------------------
The service is coded as follows:
 
//check if a service receives properly a struct passed in a SOAP message.
//assumed struct with 2 String components
 

public class StructTest2
{
   
    public MyStruct serviceMethod(MyStruct s)
    {
        String aux="";
        aux=s.geta();
        s.seta(s.getb());
        s.setb(aux);
        return s;
    }
}
-----------------------------------------
The WSDL for this service once deployed in Axis apears at the end of this mail.
-------------------------------------------
The wsdd file contents are the following:
 
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
            xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 
 <service name="StructTest2" provider="java:RPC">
  <parameter name="className" value="StructTest2"/>
  <parameter name="allowedMethods" value="*"/>
  <beanMapping qname="myNS:MyStruct" xmlns:myNS="urn:StructTest2" languageSpecificType="java:MyStruct"/>
 </service>
 
</deployment>
-----------------------------
The client has been encoded as follows:
 
{
   public static void main(String [] args) throws Exception {
      
       String target = "http://localhost:8080/axis/services/StructTest";
       MyStruct request = new MyStruct();
       MyStruct response;
       //
       request.seta(args[0]);
       request.setb(args[1]);
       //response.seta("j");
       //response.setb("j");
       //
       Service  service = new Service();
       Call     call    = (Call) service.createCall();
       QName  qn  = new QName( "urn:StructTest2", "MyStruct");
       //
       String result= "OK: ";
       try
       {
        call.registerTypeMapping(MyStruct.class, qn,
            new org.apache.axis.encoding.ser.BeanSerializerFactory(MyStruct.class, qn),
            new org.apache.axis.encoding.ser.BeanDeserializerFactory(MyStruct.class, qn));                       
        call.setTargetEndpointAddress( new java.net.URL(target) );
        call.setOperationName("serviceMethod");
        call.addParameter( "arg1", qn, ParameterMode.IN );
        call.setReturnType(qn, MyStruct.class);
        response =  (MyStruct) call.invoke( new Object [] {request});
 System.out.println(result + response.geta() + " " + response.getb());
 }catch (AxisFault fault){
   System.out.println("Error: " + fault.toString());
  }
   }
}
 
The error I get on executin ( no compilation errors) is the following:
 
C:\jose\SOAP\argtests\Struct2>javac StructTest2Client.java
 
C:\jose\SOAP\argtests\Struct2>java StructTest2Client works yes
Error: org.xml.sax.SAXException: Deserializing parameter 'arg1':  could not find
 deserializer for type {urn:StructTest2}MyStruct
 
 
But I have definrd the TypeMapping etc...I am lost.
Any one can give me a piece of advice?
 
Thanks in advance,
 
jose
 
----WSDL---
  <?xml version="1.0" encoding="UTF-8" ?>
- <wsdl:definitions targetNamespace="http://localhost:8080/axis/services/StructTest2" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/services/StructTest2" xmlns:intf="http://localhost:8080/axis/services/StructTest2" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="urn:StructTest2" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <schema targetNamespace="urn:StructTest2" xmlns="http://www.w3.org/2001/XMLSchema">
  <import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
- <complexType name="MyStruct">
- <sequence>
  <element name="a" nillable="true" type="xsd:string" />
  <element name="b" nillable="true" type="xsd:string" />
  </sequence>
  </complexType>
  </schema>
  </wsdl:types>
- <wsdl:message name="serviceMethodRequest">
  <wsdl:part name="in0" type="tns1:MyStruct" />
  </wsdl:message>
- <wsdl:message name="serviceMethodResponse">
  <wsdl:part name="serviceMethodReturn" type="tns1:MyStruct" />
  </wsdl:message>
- <wsdl:portType name="StructTest2">
- <wsdl:operation name="serviceMethod" parameterOrder="in0">
  <wsdl:input message="impl:serviceMethodRequest" name="serviceMethodRequest" />
  <wsdl:output message="impl:serviceMethodResponse" name="serviceMethodResponse" />
  </wsdl:operation>
  </wsdl:portType>
- <wsdl:binding name="StructTest2SoapBinding" type="impl:StructTest2">
  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="serviceMethod">
  <wsdlsoap:operation soapAction="" />
- <wsdl:input name="serviceMethodRequest">
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded" />
  </wsdl:input>
- <wsdl:output name="serviceMethodResponse">
  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/services/StructTest2" use="encoded" />
  </wsdl:output>
  </wsdl:operation>
  </wsdl:binding>
- <wsdl:service name="StructTest2Service">
- <wsdl:port binding="impl:StructTest2SoapBinding" name="StructTest2">
  <wsdlsoap:address location="http://localhost:8080/axis/services/StructTest2" />
  </wsdl:port>
  </wsdl:service>
  </wsdl:definitions>
 

Reply via email to