来自WSDL的Axis 1.4 webservice
问题描述:
我需要从另一家公司的WSDL文件创建一个webservice(服务器应用程序,而不是客户端)。我从WSDL创建了客户端应用程序,但从来没有创建服务器应用没有其他公司提供的文档,但我在网上找到了(第64页);它是从2008年开始的,但他们告诉我信息仍然有效(尽管链接不是)。我从这个zip file得到了Notification.wsdl和Notification.XSD。来自WSDL的Axis 1.4 webservice
我使用的WSDL2Java与此命令行:
java org.apache.axis.wsdl.WSDL2Java --server-side Notification.wsdl
和创建了几个Java源文件和部署/ 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.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命令不会生成服务,操作和类型mappi我的猜测是否取决于你使用的版本。
我正在使用axis-1.4和axis-ant-1.4。它给我带来了一切,但我仍然需要做一些改变。所以我建议你尝试ANT并使用这些版本,至少会产生服务,操作和类型映射。