如何配置Apache代理以正确返回JAX-WS WSDL XSD位置

时间:2019-06-25 13:37:37

标签: apache wsdl jax-ws weblogic12c mod-proxy

我需要在本地Apache代理后面的Weblogic应用程序服务器上发布JAX-WS Web服务。将Weblogic服务器配置为仅侦听本地主机请求,并且Apache代理使用http://myServer/myServicehttp://localhost:1234/myService通过ProxyPass重定向到ProxyPassReverse到应用程序服务器的应用程序服务器(存在有效的RewriteRule可以将所有http:流量传输到https:)。

当我通过http://myServer/myService?wsdl请求SOAP服务的WSDL时,我得到了我所期望的WSDL,但是WSDL的xsd schemaLocation部分再次指向了localhost(这是由于Web服务被有效地调用了)来自本地主机):

<types>
  <xsd:schema>
    <xsd:import schemaLocation="http://localhost:1234/myService?xsd=1" namespace="http://myService.myCompany.com"/>
  </xsd:schema>
</types>

当我通过schemaLocation xsd URL请求xsd时,用正确的服务器名称替换了localhost,则xsd看起来与我期望的一样。由于本地主机部分肯定是错误的,因此我通过将ProxyPerserveHost On添加到我的httpd配置文件中来更改了Apache配置,以保留调用者的主机名,返回的wsdl再次指向myServer,就像我期望的那样:

<types>
  <xsd:schema>
    <xsd:import schemaLocation="http://myServer:80/myService?xsd=1" namespace="http://myService.myCompany.com"/>
  </xsd:schema>
</types>

再次,从该URL检索xsd可以正常工作,该xsd有效且外观符合预期。当我尝试从URL http://myServer/myService?wsdl创建SoapUI SOAP项目时,出现错误org.apache.xmlbeans.XmlException: error: Unexpected end of file after null

当我在没有Apache代理的情况下从Weblogic服务器上的相同部署中检索相同的WSDL时,即使我在原始服务器上没有代理的情况下直接调用该服务,也一切正常。

我将如何正确配置我的Apache Proxy,以能够使用动态WSDL传递并返回有效的wsdl和xsd,而不必手动创建带有嵌入式xsd的wsdl文件?

1 个答案:

答案 0 :(得分:0)

好吧,看来我自己弄清楚了...

问题似乎出在港口。最初,xsd schemaLocation被指定为http://myServer:80。在应用程序服务器部署配置中禁止对我的部署进行http:通信后,该端口正确返回为443,这也使其他所有内容也正常运行:

<types>
  <xsd:schema>
    <xsd:import schemaLocation="https://myServer:443/myService?xsd=1" namespace="http://myService.myCompany.com"/>
  </xsd:schema>
</types>