2016-03-03 39 views
1

我们在JBoss EAP 6.4.0(JBoss AS 7.5.0)的WAR中部署了一个JAX-WS webservice,它提供了预定义的WSDL和XSD:如何防止JBoss将JAX-WS XSD导入URL重写为HTTP

@WebService(endpointInterface = "package.MyPortType", 
    targetNamespace = "http://target.name.space", 
    wsdlLocation = "/WEB-INF/classes/myService.wsdl", 
    serviceName = "myService", 
    portName = "myServicePort") 
public class MyService implements MyPortType { 
... 
} 

JBoss的正确部署Web服务并发布给定的WSDL为 http://localhost:8080/myApp/myServicehttp://localhost:8080/myApp/myService?wsdl

我们遇到在于WSDL中的XSD进口的问题。在最初的WSDL,它看起来像:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" ...> 
<types> 
    <xsd:schema targetNamespace="http://target.name.space"> 
     <xsd:import namespace="http://target.name.space" 
      schemaLocation="mySchema.xsd" /> 

但JBoss的重写这

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" ...> 
<types> 
    <xsd:schema targetNamespace="http://target.name.space"> 
     <xsd:import namespace="http://target.name.space" 
      schemaLocation="https://localhost:8443/myApp/myService?xsd=mySchema.xsd" /> 

这不起作用,因为我们既没有HTTPS的连接器也HTTPS入standalone.xml插座绑定定义。所以JBoss运行时没有任何HTTPs连接。 我们没有任何关于Web服务部署的其他配置文件。

为什么进口改写成这样一种错误的方式,我们如何防止这种情况发生?

回答

1

从JAX-WS规范:

JAX-WS实现必须修补的所有wsdl:import并指向本地文档本地文档xsd:import声明的位置属性...

...请注意,虽然目录设施(见4.4)用于解决在处理根描述文档时遇到的任何绝对URL或通过wsdl:importxsd:import语句可以从它们传递到的任何文档,但那些当导入文档发布时,绝对URL不会被重写,因为通过目录解析的文档不被视为本地,即使目录将其映射到与应用程序一起打包的资源。

所以,你必须为什么位置被改​​写,特别是因为XSD是本地的。

为避免重写,您需要在原始WSDL的schemaLocation字段中指定您选择的绝对URL。

至于为什么错误地重写位置?在JBoss issue board上有some喋喋不休,这可能表明您的JAX-WS实现中存在一个错误