使用 Apache cxf、soapUI(或 Eclipse)和 Fiddler 创建客户端
Create a client with Apache cxf, soapUI(or Eclipse) and Fiddler
我的目标是使用 Apache CXF 创建 Web 服务的客户端,该客户端位于我只能通过油灰隧道到达的主机 (https://serverOutOfThisWorld) 中。
L8400 -> serverOutOfThisWorld:443
我在主机中添加了以下内容:
localhost serverOutOfThisWorld
所以我可以在我的浏览器中输入
https://serverOutOfThisWorld:8400/Bus/SomeWebService?wsdl
现在,我可以毫无问题地从 Web 浏览器访问此 wsdl。但是这个 WSDL 有一些指向这个网站的导入,例如:
<xsd:import namespace="http://inter.es/scsp/esquemas/datos"
schemaLocation="https://serverOutOfThisWorld/scehma/data.xml"/>
<xsd:import ....
因此,下一步是使用 Fiddler,尝试将对 serverOutOfThisWorld:433 的任何调用映射到我的 serverOutOfThisWorld:8400。好的,我在 Tools/HOSTS 选项中创建了这个:
serverOutOfThisWorld:8400 serverOutOfThisWorld
现在,我可以在浏览器中导航到此 url:
https://serverOutOfThisWorld/Bus/SomeWebService?wsdl
并且,通过在 SoapUI 中定义代理以使用 Fiddler,我可以基于该 URL 创建一个新建->Soap 项目。
但是当我尝试使用 SoapUI 和工具 > Apache CFX 创建客户端时,我的问题来了。似乎 URLs 没有被覆盖。在 soapUI 日志中,我看到:
Mon Jun 22 14:07:22 CEST 2015:INFO:command: [cmd.exe, /C, wsdl2java.bat, -p, my.packages, -d, C:\eclipsewks\PruebaWS\src, -client, -exsh, false, -dns, true, -dex, true, -verbose, https://serverOutOfThisWorld:443/Bus/SomeWebService?wsdl]
似乎在cmd/wsdl2Java中没有使用fiddler...
其他选项正在尝试与 eclipse 相同..但最后,eclipse 也使用 wsd2java 来创建客户端。我能做什么?
这可能不是您问题的直接答案。让我试着解释一下当我遇到这种情况时我会怎么做。
我只是将所有 Wsdl 和 xsd 文件下载到同一目录,而不是使用代理和重定向。之后,我用简单的文件名更新了所有导入语句。由于所有文件都在同一个目录中,我只在导入语句中使用名称,不需要其他路径定义。
如果我想使用 SoapUI,我只使用我的 WSDL 版本,然后在需要时将端点更新为真实端点(在您的情况下,这将是 fiddler 地址)。
如果我想生成 java 客户端,我只需简单地使用带有 wsdl2java
的命令行。同样,在使用此客户端时,我相应地覆盖了它的连接地址。
终于,我设法开始工作了。您必须编辑 wsdl2java(.bat 或 sh)并设置选项以使代理在 Fiddler 中工作:
"%JAVA_HOME%\bin\java" -Xmx128M -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888
现在我有其他问题(具有相同的 类 名称),但这是另一个问题(可能通过绑定名称或其他方式解决)。
我的目标是使用 Apache CXF 创建 Web 服务的客户端,该客户端位于我只能通过油灰隧道到达的主机 (https://serverOutOfThisWorld) 中。
L8400 -> serverOutOfThisWorld:443
我在主机中添加了以下内容:
localhost serverOutOfThisWorld
所以我可以在我的浏览器中输入
https://serverOutOfThisWorld:8400/Bus/SomeWebService?wsdl
现在,我可以毫无问题地从 Web 浏览器访问此 wsdl。但是这个 WSDL 有一些指向这个网站的导入,例如:
<xsd:import namespace="http://inter.es/scsp/esquemas/datos"
schemaLocation="https://serverOutOfThisWorld/scehma/data.xml"/>
<xsd:import ....
因此,下一步是使用 Fiddler,尝试将对 serverOutOfThisWorld:433 的任何调用映射到我的 serverOutOfThisWorld:8400。好的,我在 Tools/HOSTS 选项中创建了这个:
serverOutOfThisWorld:8400 serverOutOfThisWorld
现在,我可以在浏览器中导航到此 url: https://serverOutOfThisWorld/Bus/SomeWebService?wsdl
并且,通过在 SoapUI 中定义代理以使用 Fiddler,我可以基于该 URL 创建一个新建->Soap 项目。
但是当我尝试使用 SoapUI 和工具 > Apache CFX 创建客户端时,我的问题来了。似乎 URLs 没有被覆盖。在 soapUI 日志中,我看到:
Mon Jun 22 14:07:22 CEST 2015:INFO:command: [cmd.exe, /C, wsdl2java.bat, -p, my.packages, -d, C:\eclipsewks\PruebaWS\src, -client, -exsh, false, -dns, true, -dex, true, -verbose, https://serverOutOfThisWorld:443/Bus/SomeWebService?wsdl]
似乎在cmd/wsdl2Java中没有使用fiddler...
其他选项正在尝试与 eclipse 相同..但最后,eclipse 也使用 wsd2java 来创建客户端。我能做什么?
这可能不是您问题的直接答案。让我试着解释一下当我遇到这种情况时我会怎么做。
我只是将所有 Wsdl 和 xsd 文件下载到同一目录,而不是使用代理和重定向。之后,我用简单的文件名更新了所有导入语句。由于所有文件都在同一个目录中,我只在导入语句中使用名称,不需要其他路径定义。
如果我想使用 SoapUI,我只使用我的 WSDL 版本,然后在需要时将端点更新为真实端点(在您的情况下,这将是 fiddler 地址)。
如果我想生成 java 客户端,我只需简单地使用带有 wsdl2java
的命令行。同样,在使用此客户端时,我相应地覆盖了它的连接地址。
终于,我设法开始工作了。您必须编辑 wsdl2java(.bat 或 sh)并设置选项以使代理在 Fiddler 中工作:
"%JAVA_HOME%\bin\java" -Xmx128M -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888
现在我有其他问题(具有相同的 类 名称),但这是另一个问题(可能通过绑定名称或其他方式解决)。