【问题标题】:Axis 1.4 webservice from WSDL来自 WSDL 的 Axis 1.4 Web 服务
【发布时间】:2012-06-08 12:37:15
【问题描述】:

我需要从另一家公司的 WSDL 文件创建一个 Web 服务(服务器应用程序,而不是客户端)。我已经从 WSDL 创建了客户端应用程序,但从未创建过服务器应用程序。没有其他公司提供的文件,但我在网上找到了this(第64页);它是从 2008 年开始的,但他们告诉我信息仍然有效(尽管链接无效)。我从这个zip file 得到了 Notification.wsdl 和 Notification.XSD。

我在这个命令行中使用了 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>

至少应该有一个&lt;service&gt; 条目,还是我需要手动创建它?我希望它是自动创建的。 WSDL 文件中是否缺少某些内容?还是我在某个地方漏掉了一步?

戴夫

【问题讨论】:

    标签: java axis wsdl2java


    【解决方案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 命令不生成服务、操作和类型映射,我猜这取决于您使用的版本。

    我正在使用axis-1.4 和axis-ant-1.4。它为我创造了一切,但我仍然需要做出一些改变。所以我建议你尝试 ANT 并使用那些版本,至少会生成服务、操作和类型映射。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2012-07-29
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2010-10-28
      相关资源
      最近更新 更多