gpt4 book ai didi

java - JAVA 中 SOAP 生成的客户端出现 InaccessibleWSDLException 错误

转载 作者:行者123 更新时间:2023-11-30 02:36:26 27 4
gpt4 key购买 nike

我们正在与服务提供商的 wsdl 合作,由于安全原因,该服务无法被发现,他们为我们提供了一堆文件,包括 wsdl 、xsd 等。我们需要访问提供商的 api。为此,我们做了以下这些事情:

  1. 我们使用 netbean 8.0 形式桌面位置(本地文件) 生成了一个 Web 服务客户端
  2. 使用生成的客户端代码,我们使用以下代码调用了 api
URL url = new URL("http://serverip:port/payment/services/MgrService");    
MgrService svc = new MgrService(url);
Response response = svc.getMgrServicePort().apiRequest(request);

但出现这些异常

com.sun.xml.internal.ws.wsdl.parser.InaccessibleWSDLException: 2 counts of InaccessibleWSDLException.

java.io.IOException: Server returned HTTP response code: 500 for URL: http://serviceip:port/payment/services/MgrService
java.io.IOException: Server returned HTTP response code: 500 for URL: http://serviceip:port/payment/services/MgrService?wsdl

at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(RuntimeWSDLParser.java:260)
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:231)
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:194)
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:163)
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:348)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:306)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:215)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:196)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:192)
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:104)
at javax.xml.ws.Service.<init>(Service.java:77)

通过 Wireshark,我们注意到它正在调用一个没有 SOAP 体的 get 方法,而它应该只调用 post 方法。我们已经使用soapUI测试了api,服务正常。我们还使用原始 xmlsoap 请求获得了成功的响应。

当 WSDL 不可发现时,是否可以为 JAX-WS 和 Spring WS 使用生成的客户端?或者它仅适用于 JAX-WS 的 wsdl 文件。如果是这样那么我们需要编辑 wsdl 吗?或其他一些方法

最佳答案

经过一番研究,我发现了这些!

1)对于 Spring WS,生成的客户端无法工作(就像 Netbean 生成的 SOAP 客户端一样)

2)此链接对我使用 Spring STS 使用 Spring-WS 服务有很大帮助 Consuming a SOAP web service

但在继续之前需要做一些事情

a) 将 maven-jaxb2-plugin 版本修复为较低版本 (0.12.1)

b) 添加包含这些内容的 binding.xjb 文件

<?xml version="1.0"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings>
<jxb:globalBindings>
<xjc:simple/>
</jxb:globalBindings>
</jxb:bindings>
</jxb:bindings>

否则 xjc 将无法工作

3) 将 wsdl 和 xsd 文件复制到本地项目目录,pom 配置将如下(对于出于安全原因未托管 wsdl 的场景)

<configuration>
<schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
<schemaIncludes>
<include>*.wsdl</include>
</schemaIncludes>
</configuration>

3)不建议编辑wsdl文件

关于java - JAVA 中 SOAP 生成的客户端出现 InaccessibleWSDLException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42923157/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com