gpt4 book ai didi

java - 通过 https 和防火墙的 SOAP Spring 客户端请求

转载 作者:太空宇宙 更新时间:2023-11-03 13:50:01 24 4
gpt4 key购买 nike

自从我编写 SOAP 客户端以来已经有一段时间了,但我正在尝试编写一个跨 https 并通过防火墙连接/使用外部 SOAP 服务的客户端。

我已手动提取 wsdl 和模式并使用 Eclipse Web 服务客户端功能生成 Web 服务代码。我现在正在通过 get 请求调用客户端代码,只是为了看看我是否可以连接到 WS。我可以在 Chrome\IE 中浏览 WSDL,并能够使用 ReadyApi 测试 Java 和 RAD/WebSphere 之外的连接。

@Bean
public Jaxb2Marshaller marshaller() {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setPackagesToScan("com.complianceservice.client");
try {
marshaller.afterPropertiesSet();
} catch (Exception e) {
e.printStackTrace();
}
return marshaller;
}
@Bean
public VendorClient vendorClient(Jaxb2Marshaller marshaller) {
VendorClient client = new VendorClient ();
client.setDefaultUri("https://webservice.vendor.com/WebServices/productServices.svc?wsdl");
client.setMarshaller(marshaller);
client.setUnmarshaller(marshaller);
return client;
}

这将调用客户端服务代码...

@GetMapping(value = "/health")
public String getHealth() throws ResponseException {
Response response = vendorComplianceService.processHealth();
return response!= null?"Health, OK":"Problem detected";
}

@Override
public MessageResponse processHealth() throws ResponseException {
try {
GetDaysUntilPasswordExpiresResponse response = vendorClient.getGetDaysUntilPasswordExpires();
if (response != null){
MessageResponse myResponse = new MessageResponse();
//set something
return myResponse;
}
} catch (Exception e) {
e.printStackTrace();
throw new ResponseException(e);
}
return null;
}

public GetDaysUntilPasswordExpiresResponse getGetDaysUntilPasswordExpires( ){

GetDaysUntilPasswordExpires requestPayload = new GetDaysUntilPasswordExpires();
requestPayload.setContext(healthClientContext());
log.info("Requesting expire info for :" + clientContext.getUserID());
GetDaysUntilPasswordExpiresResponse response = (GetDaysUntilPasswordExpiresResponse) getWebServiceTemplate()
.marshalSendAndReceive("https://webservice.vendor.com/WebServices/IAccount/GetDaysUntilPasswordExpires", requestPayload
);
return response;
}

这将超时寻找来自服务器的连接响应,因为我们的防火墙阻止了它。

我如何告诉这个客户端代码使用代理设置来通过我们在 Java/Spring 中的防火墙?在 REST 中,我能够指定一个 httpclient,它使用带有 ssl 连接套接字工厂的 Proxy 凭据提供程序。我不确定如何对使用 WebServiceTemplate 进行编码、发送和接收的 SOAP 客户端执行此操作。这是个好主意吗?

另外,我如何记录或查看实际的 SOAP 请求以确保我发送的格式正确?

对于熟悉 WebSphere 的人来说,如何确保远程证书已正确安装和可用?

最佳答案

对于问题的最后一部分,您通常会选择“CellDefaultTrustStore”和“从端口检索”,指定远程服务器和端口:

https://www.ibm.com/support/knowledgecenter/en/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/usec_sslretrievesignercert.html

(代理问题我没有答案。)

关于java - 通过 https 和防火墙的 SOAP Spring 客户端请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53015520/

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