编写jax-ws Web服务并在没有XSD的情况下生成WSDL

我在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); } 

履行

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

我的问题是,在我的wsdl文件中,响应类是在xsd文件中定义的。
这是我的wsdl文件的片段

       

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

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

 -inlineSchemas 

命令行开关。 [1]

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

  org.jvnet.jax-ws-commons jaxws-maven-plugin 2.2   SomeId  wsgen  prepare-package  some.class.Name true true some/target/dir true     

不需要对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

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

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

这就是说:如果你需要一个“一体化”的WSDL(因为一些古老的客户端需要它)你可以始终让jax-ws最初生成WSDL,然后根据你的内心编辑它。 可以使用@WebService批注的wsdlLocation参数包含已编辑的WSDL。