编写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。