最近学习JAX-WS,平台j2ee自带的JAX-WS,jdk1.7 eclipse4.3,发现一些有趣的事情:
发布一个Webservice,Endpoint.publish(http://localhost:8090/wcs/service/v1, new XServiceImpl());
正常发布,没有抛出异常或警告。服务端调用时,控制台输出:SEVERE: Unsupported Content-Type: application/soap+xml。查看网上知道是服务端是SOAP1.1而客户端是SOAP1.2引起的。不知道JAX-WS是否默认绑定为SOAP1.1,还是编写的wsdl指定,回头有空查资料想想。
将XServiceImpl类增加注释,意思想绑定为SOAP1.2:
@BindingType(SOAPBinding.SOAP12HTTP_BINDING) 或
@BindingType(value = "http://www.w3.org/2003/05/soap/bindings/HTTP/")
结果输出:Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: Cannot generate WSDL for binding http://www.w3.org/2003/05/soap/bindings/HTTP/
这有些意外,网上说可能是写jax-ws当时http://www.w3.org/2003/05/soap/bindings/HTTP/未成为w3c标准,我想不一定,也许某个地方有bug。在Java的页面上指出用
@BindingType(value = "http://java.sun.com/xml/ns/jaxws/2003/05/soap/bindings/HTTP/")代替,
发布是输出WARNING: Generating non-standard WSDL for the specified binding,客户端可以正常调用。
疑问是为什么会出现上面的警告,网上说不要理他,难道没有解决的方法?期待!
后续:
对于结果输出:Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: Cannot generate WSDL for binding http://www.w3.org/2003/05/soap/bindings/HTTP/
再说明:
估计jre内的jax ws版本较低,从发布后的wsdl可以看出
<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.4-b01. -->
在项目里加入较新的jax-ws包之后,如2.2.9或10等
jaxws-api.jar; jaxws-rt.jar; jaxws-tools.jar
再运行,没有之前的警告了,看新布后的wsdl可以得到
<!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.10 svn-revision#919b322c92f13ad085a933e8dd6dd35d4947364b. -->
前后两者明显不同。且SOAP是1.2版本。