Я перевожу свой клиент webesrvice из Axis в Axis2-1.6.1, но сам сервис не будет изменен.У меня проблемы с кодом, сгенерированным WDSL2Java, потому что я получаю исключение «Неожиданный субэлемент».WDSL довольно прост, поскольку существует только одна служба, и она получает только строку и возвращает дату:
<wsdl:definitions targetNamespace="xml.generator.ws">
<!--WSDL created by Apache Axis version: 1.4
Built on Apr 22, 2006 (06:55:48 PDT)-->
<wsdl:message name="generateToday1Request">
<wsdl:part name="idCompany" type="xsd:string"/>
</wsdl:message>
<wsdl:message name="generateToday1Response">
<wsdl:part name="generateToday1Return" type="xsd:dateTime"/>
</wsdl:message>
<wsdl:portType name="WSGenerator">
<wsdl:operation name="generateToday1" parameterOrder="idCompany">
<wsdl:input message="impl:generateToday1Request" name="generateToday1Request"/>
<wsdl:output message="impl:generateToday1Response" name="generateToday1Response"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="ValuationsXMLGeneratorSoapBinding" type="impl:WSGenerator">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="generateToday1">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="generateToday1Request">
<wsdlsoap:body namespace="http://generacion.stmts.bpi.com" use="literal"/>
</wsdl:input>
<wsdl:output name="generateToday1Response">
<wsdlsoap:body namespace="xml.generator.ws" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="WSGeneratorService">
<wsdl:port binding="impl:ValuationsXMLGeneratorSoapBinding" name="ValuationsXMLGenerator">
<wsdlsoap:address location="http://naboo:8080/Statements2/services/ValuationsXMLGenerator"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Я сгенерировал исходный код со следующими параметрами:
<axis-wsdl2java
output="${src.java}"
testcase="false"
wsdlfilename="http://naboo:8080/Statements2/services/ValuationsXMLGenerator?wsdl"
serverside="false"
unpackclasses="true"
unwrap="true"
suppressprefixes="true"
namespacetopackages="xml.generator.ws=com.spb.eco.valuations.xml"
generateAllClasses="true"/>
Я использую сгенерированный код для вызова службы, и отправляется следующее тело:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<generateToday1 xmlns="http://generacion.stmts.bpi.com">
<idCompany xmlns="">US0010001</idCompany>
</generateToday1>
</soapenv:Body>
</soapenv:Envelope>
И я получаю следующее:
<?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>
<generateToday1Response xmlns="http://generacion.stmts.bpi.com">
<generateToday1Return>2011-09-19T22:56:53.781Z</generateToday1Return>
</generateToday1Response>
</soapenv:Body>
</soapenv:Envelope>
И это сервер-config.wsdd для сервера:
<?xml version="1.0" ?>
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="ValuationsXMLGenerator" provider="java:RPC" style="rpc" use="literal">
<!-- Nombre de la clase que implementa los metodos expuestos -->
<parameter name="className" value="com.bpi.stmts.generacion.WSGenerator"/>
<parameter name="allowedMethods" value="generateToday1"/>
<parameter name="wsdlTargetNamespace" value="xml.generator.ws"/>
</service>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
<parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
Это не может быть проще, но сгенерированный код завершается ошибкой со следующим исключением:
Причина: org.apache.axis2.databinding.ADBException: неожиданный подэлемент {http://generacion.stmts.bpi.com}generateToday1Return
. В этом случае нет проблем с порядком элементов или чем-то подобным, поэтому я не понимаю, почему происходит сбой клиента.Есть идеи?
TIA
JL