Необходимо написать код клиента (используется DII), который принимает в качестве результата работы сервер - класс.
Сервер. приложение
| Код | public class FaqMakerService {
public MakerInfo getByMakerName(String makerName) { System.out.println("getByMakerName: recieved name - " + makerName); MakerInfo maker = new MakerInfo(); maker.FaqMaker = makerName; maker.Answer = 345; System.out.println("getByMakerName: Bewfore return");
return maker; } }
public class MakerInfo implements java.io.Serializable{ public String FaqMaker; public int Answer; }
|
wsdl файл
| Код | <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://192.168.0.174:8080/axis/services/FaqMaker" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://192.168.0.174:8080/axis/services/FaqMaker" xmlns:intf="http://192.168.0.174:8080/axis/services/FaqMaker" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="urn:FaqMaker" 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 targetNamespace="urn:FaqMaker" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <complexType name="MakerInfo"> <sequence> <element name="FaqMaker" nillable="true" type="xsd:string"/> <element name="Answer" type="xsd:int"/> </sequence> </complexType> </schema> </wsdl:types>
<wsdl:message name="getByMakerNameRequest"> <wsdl:part name="makerName" type="xsd:string"/> </wsdl:message>
<wsdl:message name="getByMakerNameResponse"> <wsdl:part name="getByMakerNameReturn" type="tns1:MakerInfo"/> </wsdl:message>
<wsdl:portType name="FaqMakerService"> <wsdl:operation name="getByMakerName" parameterOrder="makerName"> <wsdl:input message="impl:getByMakerNameRequest" name="getByMakerNameRequest"/> <wsdl:output message="impl:getByMakerNameResponse" name="getByMakerNameResponse"/> </wsdl:operation> </wsdl:portType>
<wsdl:binding name="FaqMakerSoapBinding" type="impl:FaqMakerService"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="getByMakerName"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="getByMakerNameRequest"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded"/> </wsdl:input>
<wsdl:output name="getByMakerNameResponse"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://192.168.0.174:8080/axis/services/FaqMaker" use="encoded"/> </wsdl:output> </wsdl:operation> </wsdl:binding>
<wsdl:service name="FaqMakerServiceService"> <wsdl:port binding="impl:FaqMakerSoapBinding" name="FaqMaker"> <wsdlsoap:address location="http://192.168.0.174:8080/axis/services/FaqMaker"/> </wsdl:port> </wsdl:service>
</wsdl:definitions>
|
Код клиента
| Код | void testFaqMaker() { String targetNamespace="http://192.168.0.174:8080/axis/services/FaqMaker"; String nameService = "FaqMakerServiceService"; String namePort = "FaqMaker"; String endpointAddress = "http://192.168.0.174:8080/axis/services/FaqMaker"; String nameMethod = "getByMakerName";
try { ServiceFactory factory = ServiceFactory. newInstance(); Service service = factory.createService(new QName(nameService));
javax.xml.rpc.encoding.TypeMappingRegistry mappingRegistry = service.getTypeMappingRegistry(); javax.xml.rpc.encoding.TypeMapping typeMapping = mappingRegistry.createTypeMapping(); registerBeanMapping(typeMapping, MakerInfo.class, "MakerInfo"); mappingRegistry.register(targetNamespace, typeMapping);
Call call = service.createCall(new QName(targetNamespace, namePort));
call.setTargetEndpointAddress(endpointAddress);
call.setProperty(Call.OPERATION_STYLE_PROPERTY, "rpc"); call.setProperty(Call.ENCODINGSTYLE_URI_PROPERTY, targetNamespace);
call.setOperationName(new javax.xml.namespace.QName("http://DefaultNamespace", nameMethod)); QName outType = new QName("urn:FaqMaker", "MakerInfo"); call.addParameter("InParam1", StringQName, ParameterMode.IN); call.addParameter("OutParam", outType, ParameterMode.OUT); call.setReturnType(outType, MakerInfo.class);
Object[] actualParams = new Object[] {"testName"};
Object value= call.invoke(actualParams); value.toString();
} catch (Exception e) { System.out.println(e.getMessage()); } }
protected void registerBeanMapping(TypeMapping mapping, Class type, String name) { QName qName = new QName("http://192.168.0.174:8080/axis/services/FaqMaker", "MakerInfo"); mapping.register(type, qName, new BeanSerializerFactory(type, qName), new BeanDeserializerFactory(type, qName)); }
|
На invoke вылетает с ошибкой - "org.xml.sax.SAXException: Deserializing parameter 'getByMakerNameReturn': could not find deserializer for type {urn:FaqMaker}MakerInfo"
В чем причина? |