我需要在本地Apache代理后面的Weblogic应用程序服务器上发布JAX-WS Web服务。将Weblogic服务器配置为仅侦听本地主机请求,并且Apache代理使用http://myServer/myService
和http://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文件?
答案 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>