Веб-сервис Axis 1.4 от WSDL
Мне нужно создать веб-сервис (серверное приложение, а не клиент) из файла WSDL другой компании. Я создал клиентские приложения из WSDL, но никогда не являлся серверным приложением. Документация, предоставленная другой компанией, отсутствует, но я нашел ее в Интернете (стр. 64); это с 2008 года, но они говорят мне, что информация все еще действительна (хотя ссылки не являются). Я получил Notification.wsdl и Notification.XSD из этого zip-файла.
Я использовал WSDL2Java с этой командной строкой:
java org.apache.axis.wsdl.WSDL2Java --server-side Notification.wsdl
и создал несколько исходных файлов Java и файлы deploy/undeploy.wsdd. Но файл deploy.wsdd не выглядит так, как я ожидал, основываясь на документах Axis. Он содержит только:
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
</deployment>
Не должно ли быть <service>
По крайней мере, запись, или мне нужно создать это вручную? Я ожидал, что он будет создан автоматически. Чего-то не хватает в файле WSDL? Или я где-то пропустил шаг?
Дейв
1 ответ
Если вы используете Axis 1.4, команда WSDL2Java не создаст .wsdd
файл. Вы всегда должны редактировать это.
Я использую ANT для генерируемых осевых серверных классов:
<target name="build-server-jar">
<mkdir dir="${build}/libs_gen"/>
<axis-generate serverside="true"
srcDir="${ant.dirs.wsdl}"
destDir="${build.ws.dir}/${project.name}-server"
wsdl="${project.wsdl}"
nspkg="${project.nspkg}"/>
<javac srcdir="${build.ws.dir}/${project.name}-server"
destdir="${build.ws.dir}/${project.name}-server"
classpathref="classpath.build"
includeantruntime="no"/>
<jar destfile="${build}/libs_gen/my-axis-ws.jar"
basedir="${build.ws.dir}/${project.name}-server"
includes="**/*.class"/>
<copy todir="${lib}" overwrite="true">
<fileset dir="${build}/libs_gen" includes="my-axis-ws.jar"/>
</copy>
</target>
Сгенерированный deploy.wsdd
файл выглядит так:
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="MyAxis" provider="java:RPC" style="wrapped" use="literal">
<parameter name="wsdlTargetNamespace" value="http://example.com/ws/myaxis"/>
<parameter name="wsdlServiceElement" value="MyAxis"/>
<parameter name="schemaUnqualified" value="http://example.com/ws/myaxis/types"/>
<parameter name="wsdlServicePort" value="MyAxis"/>
<parameter name="className" value="com.example.ws.myaxis.MyAxisPortBindingImpl"/>
<parameter name="wsdlPortType" value="MyAxisService"/>
<parameter name="typeMappingVersion" value="1.2"/>
//Generated operations
//Generated type mappings.
</service>
</deployment>
Затем я должен отредактировать это так:
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="disablePrettyXML" value="false"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="sendXMLDeclaration" value="true"/>
</globalConfiguration>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<service name="MyAxis" provider="java:SPRING" style="wrapped" use="literal">
<parameter name="springBeanId" value="mySpringBean"/>
<parameter name="wsdlTargetNamespace" value="http://example.com/ws/myaxis"/>
<parameter name="wsdlServiceElement" value="MyAxis"/>
<parameter name="schemaUnqualified" value="http://example.com/ws/myaxis/types"/>
<parameter name="wsdlServicePort" value="MyAxis"/>
<parameter name="className" value="com.example.ws.myaxis.MyAxisImpl"/>
<parameter name="wsdlPortType" value="MyAxisService"/>
<parameter name="typeMappingVersion" value="1.2"/>
//Generated operations
//Generated type mappings
<wsdlFile>WEB-INF/wsdl/MyAxis.wsdl</wsdlFile>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
</deployment>
Почему ваша команда WSDL2Java не генерирует службы, операции и сопоставления типов, я думаю, это зависит от используемой версии.
Я использую ось-1.4 и ось-муравей-1.4. Это порождает у меня все, но мне все еще нужно внести некоторые изменения. Поэтому я предлагаю вам попробовать ANT и использовать эти версии, и, по крайней мере, будут сгенерированы службы, операции и сопоставления типов.