2012-06-08 84 views
0

我需要從另一家公司的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

如果您使用的軸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並使用這些版本,至少會產生服務,操作和類型映射。