Thanks Tim,
You are right about that it appears I am trying to use DII ;-)
But I still have the 500 Error...
Any Hints ?
Thank you a lot already !
Kai
On the Clientside I use call.register() for registering (like
userguide/example5 in axis)
Service service = new Service();
QName qn = new QName( "urn:BankingService", "Methoden" );
QName qnb = new QName( "urn:BankingService", "MethodDescriptions" );
Call call = (Call) service.createCall();
call.registerTypeMapping(banking.bo.Methoden.class, qn,
new
org.apache.axis.encoding.ser.BeanSerializerFactory(banking.bo.Methoden.class
, qn),
new
org.apache.axis.encoding.ser.BeanDeserializerFactory(banking.bo.Methoden.cla
ss, qn));
call.registerTypeMapping(banking.bo.MethodDescriptions.class, qnb,
new
org.apache.axis.encoding.ser.BeanSerializerFactory(banking.bo.MethodDescript
ions.class, qnb),
new
org.apache.axis.encoding.ser.BeanDeserializerFactory(banking.bo.MethodDescri
ptions.class, qnb));
Is there any difference to TypeMappingRegistry ?
My wsdl file (shortend) says:
<?xml version="1.0" encoding="UTF-8" ?>
<wsdl:definitions
targetNamespace="http://localhost:8080/axis/services/Banking"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://localhost:8080/axis/services/Banking"
xmlns:intf="http://localhost:8080/axis/services/Banking"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns1="urn:BankingService" xmlns:tns3="http://bo.banking"
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:BankingService"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<complexType name="Methods">
<sequence>
<element name="erlaubt" nillable="true" type="apachesoap:Vector" />
</sequence>
</complexType>
<complexType name="MethodDescriptions">
<sequence>
<element name="exception" nillable="true" type="xsd:string" />
<element name="name" nillable="true" type="xsd:string" />
<element name="signatur" nillable="true" type="apachesoap:Vector" />
<element name="returnValue" nillable="true" type="xsd:string" />
</sequence>
</complexType>
</schema>
<schema targetNamespace="http://xml.apache.org/xml-soap"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<complexType name="Vector">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item"
type="xsd:anyType" />
</sequence>
</complexType>
</schema>
<schema targetNamespace="http://localhost:8080/axis/services/Banking"
xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
<complexType name="ArrayOf_xsd_string">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]" />
</restriction>
</complexContent>
</complexType>
</schema>
</wsdl:types>
<wsdl:message name="loginRequest">
<wsdl:part name="accountNo" type="xsd:string" />
<wsdl:part name="pw" type="xsd:string" />
</wsdl:message>
<wsdl:message name="loginResponse">
<wsdl:part name="loginReturn" type="tns1:Methods" />
</wsdl:message>
<wsdl:portType name="ServerPipeline">
<wsdl:operation name="login" parameterOrder="accountNo pw">
<wsdl:input message="impl:loginRequest" name="loginRequest" />
<wsdl:output message="impl:loginResponse" name="loginResponse" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="BankingSoapBinding" type="impl:ServerPipeline">
<wsdlsoap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="login">
<wsdlsoap:operation soapAction="" />
<wsdl:input name="loginRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://localhost:8080/axis/services/Banking" use="encoded" />
</wsdl:input>
<wsdl:output name="loginResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://localhost:8080/axis/services/Banking" use="encoded" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ServerPipelineService">
<wsdl:port binding="impl:BankingSoapBinding" name="Banking">
<wsdlsoap:address location="http://localhost:8080/axis/services/Banking"
/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
My wsdd file looks like:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Banking" provider="java:RPC">
<parameter name="className" value="banking.server.ServerPipeline"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:Methods" xmlns:myNS="urn:BankingService"
languageSpecificType="java:banking.bo.Methoden"/>
<beanMapping qname="myNS:MethodDescriptions"
xmlns:myNS="urn:BankingService"
languageSpecificType="java:banking.bo.MethodDescriptions"/>
</service>
</deployment>
>Once you've made beans of all the classes that need to cross the wire, you
>will also need to register those types. On the server-side you'd do this
>using the <beanmapping> element in the WSDD, while deploying. If using
>generated stubs, you don't need to do anything to register those types on
>the client side, but you would need to register additional type mappings if
>using dynamic invocation as you appear to be trying to do.
>Hope this [is accurate and] helps...
>Tim
>>I get an "Error : (500)Internal Server Error" when I access my
>>server-WS-Method :
>>public Methods login(String AccountNumber, String pw) {
>>My Client accesses this by :
>>Methods obj = (Methods) call.invoke(new Object[] { "0123456789", "ABC" });
>>I use JavaBeans,which holds a java.util.Vector filled with other
>>custom objects.
>>public class Methods {
>> public Vector methodDescriptions;
>>}
>>public class MethodDescriptions{
>> public String name;
>> public String returnvalue;
>> public Vector signature; // filled with Strings
>>}