gpt4 book ai didi

java - 在 Java 和 SOAPUI 中使用 Web 服务

转载 作者:搜寻专家 更新时间:2023-10-31 19:55:38 25 4
gpt4 key购买 nike

我正在使用 Java 中的 Web 服务。此服务使用 UserNameToken、时间戳和签名来实现消息级别的安全性。我已获得 SoapUI 项目文件 (xml) 以尝试从服务中获取数据。在 SoapUI 中一切正常。

现在,当我尝试使用相同的 soapUI 文件生成工件时,我收到一条消息 “Receiver Policy falsified”。为什么我可以在 soapUI 中连接到服务,但在 java 中却不能?

所以我发现我没有使用传输层安全性发送 keystore 。我如何在 SOAP 请求中发送它。我在 SSL 设置中的 SOAP UI 中做了类似的设置,它在那里工作。

这是我在 java 中的 SOAP 请求代码

SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();

String url = "https://abc.org/test/ApplicantInformationService"; // Test System Web Service URL

SSLSocketFactory sslSocketFactory = getSSLSocketFactory();

conn = urlOnly.openConnection();
if (conn instanceof HttpsURLConnection) {
((HttpsURLConnection) conn).setSSLSocketFactory(sslSocketFactory);
((HttpsURLConnection) conn).setRequestMethod("POST");
}

conn.setRequestProperty("Content-Type", "application/soap+xml;charset=UTF-8");
conn.setDoOutput(true);
SOAPMessage message = createSOAPRequest(user);
ByteArrayOutputStream os1 = new ByteArrayOutputStream();
message.writeTo(os1);
String requestXml = new String(os1.toByteArray());

OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
out.write(requestXml);
out.flush();
if(out != null){
out.close();
}
String line = "";
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String responseNewWay = "";
while ((line = in.readLine()) != null) {
responseNewWay = responseNewWay + line;
}
//SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(user), url);
//soapConnection.close();
//ByteArrayOutputStream os = new ByteArrayOutputStream();
//soapResponse.writeTo(os);
//String responseXml = new String(os.toByteArray());

而SSLFactory代码是这样的

  private static SSLSocketFactory getSSLSocketFactory() 
throws KeyStoreException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException, IOException, KeyManagementException{
SSLSocketFactory sslsf = null;
String keyStoreFileName = Preference.portalDir() + "mydocs/keystore.jks";

String keyStorePath = ClassLoader.getSystemResource(keyStoreFileName).getPath();
String keyStoreType = "JKS";
String keyStorePassword = "mypassword";
String trustStoreFileName = Preference.portalDir() + "mydocs/keystore.jks";

String trustStorePath = ClassLoader.getSystemResource(trustStoreFileName).getPath();
String trustStorePassword = "mypassword";
String alias = "clientcertificate";

Properties systemProps = System.getProperties();
systemProps.put("javax.net.ssl.keyStore", keyStorePath);
systemProps.put("javax.net.ssl.keyStorePassword", keyStorePassword);
systemProps.put("javax.net.ssl.keyStoreType", keyStoreType);

systemProps.put("javax.net.ssl.trustStore", trustStorePath);
systemProps.put("javax.net.ssl.trustStoreType", "JKS");
systemProps.put("javax.net.ssl.trustStorePassword", trustStorePassword);
System.setProperties(systemProps);

KeyManager[] keyManagers = createKeyManagers(keyStoreFileName,keyStorePassword, alias);
TrustManager[] trustManagers = createTrustManagers(trustStoreFileName, trustStorePassword);
sslsf = initItAll(keyManagers, trustManagers);

return sslsf;
}

我得到的错误 SOAP 响应是这样的

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Body>
<soapenv:Fault>
<soapenv:Code>
<soapenv:Value>soapenv:Receiver</soapenv:Value>
</soapenv:Code>
<soapenv:Reason>
<soapenv:Text xml:lang="en-US">Policy Falsified</soapenv:Text>
</soapenv:Reason>
<soapenv:Role>https://abc.org/test/ApplicantInformationService</soapenv:Role>
<soapenv:Detail>
<l7:policyResult
status="Service Not Found. The request may have been sent to an invalid URL, or intended for an unsupported operation." xmlns:l7="http://www.layer7tech.com/ws/policy/fault"/>
</soapenv:Detail>
</soapenv:Fault>
</soapenv:Body>

现在我收到这个错误

Server returned HTTP response code: 500 for URL: https://abc.org/test/ApplicantInformationService

最佳答案

也许你必须在 url 字符串的末尾附加“?wsdl”:

String url = "https://abc.org/test/ApplicantInformationService?wsdl";

关于java - 在 Java 和 SOAPUI 中使用 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20210993/

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