我有WSDL(我是从外部提供商那里获得的)。有这样的行:

  <xsd:complexType name="SalesRequest">
                <xsd:all>
                    <xsd:element name="merchantid" type="xsd:int"/>
                    <xsd:element name="password" type="xsd:string"/>
                    ...
                </xsd:all>
  </xsd:complexType>

  ...
  <message name="SalesResponse">
        <part name="request" type="tns:SalesResponse"/>
  </message>
  ..
  <portType name="InterfacePortType">
    <operation name="Sales">
        <documentation>some text</documentation>
        <input message="tns:SalesRequest"/>
        <output message="tns:SalesResponse"/>
  </operation>

我已经基于此WSDL(使用JAX-RPC)生成了Java类。

然后,我创建了Axis Service(MyService实现了InterfacePortType)。

我准备的XSDD文件确实将MyService部署到Web应用程序。

因此,然后我调用MySerive的我的方法之一,并在服务器端响应序列化时收到此错误:

意外元素名称:expected = request,actual = SalesReturn

这意味着我的XSDL和XSDD没有太多其他功能。 MyService准备了这样的响应(但不能通过网络发送):
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope
...
<SalesReturn href="#id0"/></ns1:SalesResponse><multiRef xmlns:ns2=
...
</soapenv:Envelope>

问题是:为了从服务响应XML中获得'request'而不是'SalesReturn',我应该如何处理WSDD?

我不知道这个' Return '后缀来自何处。

-我已经做了一些步骤:

我用谷歌搜索,发现WSDL应该有“schema elementFormDefault =“qualified””。但是我无法更改WSDL,因为它是外部的,它是由外部提供程序提供的。

最佳答案

我找到了解决方案,我使用 axistools-maven-plugin 生成了WSDD,设置:serverSide参数为 true -然后生成了WSDD文件。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
     <artifactId>axistools-maven-plugin</artifactId>
        <executions>
            <execution>
                <id>wsdl2java-job</id>
                 <phase>generate-sources</phase>
                    <goals>
                      <goal>wsdl2java</goal>
                    </goals>
                  <configuration>
                      <sourceDirectory>
                           src/main/config/wsdl2java/myfolder
                       </sourceDirectory>
                        <outputDirectory>
                            ${generatedSourcesDirectory}
                        </outputDirectory>
                        <testCases>false</testCases>
                        <serverSide>true</serverSide>
                        <subPackageByFileName> false
                        </subPackageByFileName>
                        <packageSpace> my.api
                        </packageSpace>
                        </configuration>
                   </execution>
     </plugin>

顺便说一句,当我启动此插件时,它最终会出现编译异常,但是,它仍然可以生成WSDD。

然后,如果查看生成的WSDD,则在我手工制作的WSDD中没有一些有趣的行:
<operation name="sales" qname="operNS:Sales"
xmlns:operNS="urn:Interface"
returnQName="request"
returnType="rtns:SalesResponse"
xmlns:rtns="urn:Interface" soapAction="urn:Interface#Sales" >
  <parameter qname="in" type="tns:SalesRequest" xmlns:tns="urn:Interface"/>
</operation>

这部分: returnQName =“request”

它还会生成“typeMapping”标签(但我使用了beanMapping)

因此,一旦将这些更改添加到我的文件中,我就可以正常工作。

实际上,最初是为了生成初始资源,我使用了另一个插件:maven-antrun-plugin

但是没有生成WSDD的选项。

07-25 21:03