java - 如何使用 Java 使用 rpc 编码的 SOAP Web 服务

标签 java soap soap-rpc-encoded

有没有一种方法可以通过 java 使用 SOAP Web 服务:

  • 所需的 SOAPaction(例如名为“find”的方法名称)
  • 网络服务的 URL
  • header 身份验证(用户名和密码)
  • 最后输出结果

我有一个示例请求 xml 文件,通过 php 成功使用它,但我找不到在 java 上执行此操作的正确方法。

[更新:Web 服务的 WSDL 样式是 RPC/编码]

[更新 #2:您可以找到我如何解决下面的问题(通过使用 IDE 生成的 java stub )]

最佳答案

您可以使用java.net.HttpURLConnection发送 SOAP 消息。例如:

public static void main(String[] args) throws Exception {

    String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
            "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n" +
            "  <soap:Body>\r\n" +
            "    <ConversionRate xmlns=\"http://www.webserviceX.NET/\">\r\n" +
            "      <FromCurrency>USD</FromCurrency>\r\n" +
            "      <ToCurrency>CNY</ToCurrency>\r\n" +
            "    </ConversionRate>\r\n" +
            "  </soap:Body>\r\n" +
            "</soap:Envelope>";

    Authenticator.setDefault(new Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("username", "password".toCharArray());
        }
    });

    URL url = new URL("http://www.webservicex.net/CurrencyConvertor.asmx");
    URLConnection  conn =  url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    conn.setRequestProperty("SOAPAction", "http://www.webserviceX.NET/ConversionRate");

    // Send the request XML
    OutputStream outputStream = conn.getOutputStream();
    outputStream.write(xml.getBytes());
    outputStream.close();

    // Read the response XML
    InputStream inputStream = conn.getInputStream();
    Scanner sc = new Scanner(inputStream, "UTF-8");
    sc.useDelimiter("\\A");
    if (sc.hasNext()) {
        System.out.print(sc.next());
    }
    sc.close();
    inputStream.close();

}

关于java - 如何使用 Java 使用 rpc 编码的 SOAP Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768181/

相关文章:

java - 如何将标签绑定(bind)到支持类中的文本?

java - 在多 war Spring 应用程序中使用共享父应用程序上下文

java - 即使在正确登录后也无法调用任何需要身份验证的操作

c# - 如何使用 WCF 使用 PHP SOAP 服务

java - 无法从 Java SE 客户端访问 EJB - 查找失败错误

java - 对类的对象进行排序

java - WebService 无法处理没有命名空间前缀的 SOAP 主体的请求

java - 在 Java 中为 ws-security UsernameToken 实现密码摘要

c# - 在 .NET 中使用 RPC/编码的 SOAP Web 服务时出错