编写jax-ws Web服务并生成不带XSD的WSDL

mar*_*ami 11 java tomcat wsdl web-services jax-ws

我在java上为tomcat应用服务器编写了一个简单的JAX-WS Web服务.

我有一个接口和实现类:
接口

@WebService(name = "myWs")
@SOAPBinding(style = Style.RPC)
public interface IMyWs {
    @WebMethod(operationName = "getUser")
    Response getUser(@WebParam(name = "phone", mode = Mode.IN) String phone);

}
Run Code Online (Sandbox Code Playgroud)


履行

@WebService(endpointInterface = "ge.mari.IMyWs")
public class MyWs implements IMyWs {
    @Override
    public Response getUser(String phone) {
               // SOME CODE
        return response;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,在我的wsdl文件中,Response类是在xsd文件中定义的.
这是我的wsdl文件的片段

<types>
<xsd:schema>
          <xsd:import namespace="http://ws.mari.ge/" schemaLocation="http://localhost:8080/MyServcie/MyWs?xsd=1">
</xsd:import>
</xsd:schema>
</types>
Run Code Online (Sandbox Code Playgroud)

如何使Web服务生成WSDL文件中的所有类型而不是单独的XSD文件?
我应该更改任何配置或添加一些注释到我的Web服务?

Kal*_*lja 9

您可以使用JAX-WS将生成的模式插入到WSDL文件中

-inlineSchemas
Run Code Online (Sandbox Code Playgroud)

命令行开关.[1]

如果您在项目中使用Maven,则可以配置JAX-WS maven插件,以便在执行配置中对inlineSchemas配置元素执行相同操作,如下所示:[2]

<plugin>
  <groupId>org.jvnet.jax-ws-commons</groupId>
  <artifactId>jaxws-maven-plugin</artifactId>
  <version>2.2</version>
  <executions>
    <execution>
      <id>SomeId</id>
      <goals>
        <goal>wsgen</goal>
      </goals>
      <phase>prepare-package</phase>
      <configuration>
        <sei>some.class.Name</sei>
        <genWsdl>true</genWsdl>
        <keep>true</keep>
        <resourceDestDir>some/target/dir</resourceDestDir>
        <inlineSchemas>true</inlineSchemas>
      </configuration>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

不需要对Java类进行任何更改.

[1] http://jax-ws.java.net/nonav/2.2.1/docs/wsgen.html

[2] http://jax-ws-commons.java.net/jaxws-maven-plugin/wsgen-mojo.html


小智 0

AFAIK 让 JAX 生成具有内联模式的 WSDL 是不可能的。

顺便说一句:将 WSDL 定义和 XSD 模式分开是一个很好的举措(您可能希望在不同的上下文中使用模式定义的对象结构,例如将数据存储到文件或类似的东西)。

这就是说:如果您需要“一体化”WSDL(因为某些古老的客户端需要它),您始终可以jax-ws先生成 WSDL,然后将其编辑为您想要的内容。可以使用注释wsdlLocation的参数包含编辑后的 ​​WSDL @WebService。