gpt4 book ai didi

java - 如何使用 java 发送带有用户名和密码的 SOAP 请求,就像在 SOAP UI 中一样

转载 作者:行者123 更新时间:2023-12-01 17:52:57 25 4
gpt4 key购买 nike

很抱歉,如果这个问题重复,但我在 StackOverflow 中尝试了几个解决方案,但在发送 SOAP 请求时仍然遇到问题。

我目前的情况是我的 java 应用程序需要向我的客户 Web 服务发送 SOAP 请求,我在 SOAP UI 中成功完成了此操作,使用用户名、密码、身份验证类型:抢占式。请看图片

enter image description here

现在我想在Java中执行此操作,我已经创建了SOAP信封,没有设置密码,响应与不使用身份验证的SOAP UI中的响应完全相同,这意味着java代码只需要添加身份验证工作。这是我当前的 Java 代码:

callSoapWebService(soapEndpointUrl, soapAction);

private static void callSoapWebService(String soapEndpointUrl, String soapAction) {
try {
// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();

// Send SOAP Message to SOAP Server
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(soapAction), soapEndpointUrl);

// Print the SOAP Response
System.out.println("Response SOAP Message:");
soapResponse.writeTo(System.out);
System.out.println();

soapConnection.close();
} catch (Exception e) {
System.err.println("\nError occurred while sending SOAP Request to Server!\nMake sure you have the correct endpoint URL and SOAPAction!\n");
e.printStackTrace();
}
}

private static SOAPMessage createSOAPRequest(String soapAction) throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();

createSoapEnvelope(soapMessage);

MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", soapAction);

soapMessage.saveChanges();

return soapMessage;
}

createSoapEnvelope() 内部是创建 SOAP 请求主体的代码,所以我想我必须对 header 做一些事情。任何人都可以帮助我实现像我在 SOAP UI 中所做的那样的身份验证吗?

最佳答案

您需要以基本格式发送用户名和密码:

String userAndPassword = String.format("%s:%s",username, password);

String basicAuth = new sun.misc.BASE64Encoder().encode(userAndPassword.getBytes());
MimeHeaders mimeHeaders = message.getMimeHeaders();
mimeHeaders.addHeader("Authorization", "Basic " + basicAuth);

如果您使用的是 Java 8,请使用 Base64.getEncoder().encodeToString() 而不是 new sun.misc.BASE64Encoder()

关于java - 如何使用 java 发送带有用户名和密码的 SOAP 请求,就像在 SOAP UI 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47957235/

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