当前位置: 首页 > 知识库问答 >
问题:

如何在 Java 中生成和发送肥皂请求

秦楚
2023-03-14

SOAP请求有一个服务endpoint和一个xsd文件。但是,没有wsdl文件。我如何从这里手动生成soap请求(作为字符串的xml请求)并将其发送到服务endpoint?

我在SO上找到了类似的答案。但这是针对C#和. NET的,任何针对Java的想法都会受到高度赞赏。

共有2个答案

乜元魁
2023-03-14

这是我的一个连接到SharePoint Web服务的旧项目的示例。它应该向您展示您需要的所有基础知识。

try {
    URL sharepoint = new URL("http://server.com/_vti_bin/Lists.asmx");
    URLConnection sharepoint_connection = sharepoint.openConnection();

    String body = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
        "<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/\">" +
        "  <soap:Body>" +
        "  </soap:Body>" +
        "</soap:Envelope>";
    System.out.println("~~~~~ Roadmap: " + body);

    sharepoint_connection.setRequestProperty("Man", "POST /_vti_bin/Lists.asmx HTTP/1.1");
    sharepoint_connection.setRequestProperty("Host", "server.com");
    sharepoint_connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
    sharepoint_connection.setRequestProperty("Content-Length", Integer.toString(body.length()));
    sharepoint_connection.setRequestProperty("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetListItems");

    // Write request body to SharePoint
    sharepoint_connection.setDoOutput(true);
    OutputStreamWriter writer = new OutputStreamWriter(sharepoint_connection.getOutputStream());
    writer.write(body);
    writer.close();

    //sharepoint_connection.connect();

    // Read result from SharePoint
    BufferedReader reader = new BufferedReader(new InputStreamReader(sharepoint_connection.getInputStream()));
    String inputLine;
    while ((inputLine = reader.readLine()) != null)
        xmltext += inputLine;
    reader.close();
} catch (MalformedURLException e) {     // new URL() failed
} catch (IOException e) {               // openConnection() failed
}
欧阳山
2023-03-14

看看[JAXB]:https://jaxb.java.net/它确实像你所要求的那样。如果需要,它会生成java类:

命令xjc是生成的关键

 类似资料:
  • 我想使用 wsdl 文件从 Camel 调用第三方网络服务,而无需生成任何客户端代码(因为我认为如果我提供 wsdl 文件,那么 Camel 能够生成我们之前生成的客户端,并且在我们的旧代码中工作) 经过长时间的搜索,我找到了一些帮助我实现目标的代码 代码为 这工作正常,但这里我是手动生成soap信封 wsdl文件是 现在我想生成肥皂请求,而不是静态的 请帮助我 先谢谢了

  • 我在CentOS机器上启用标题中提到的模块时遇到了一些问题。 百胜安装php-mCrypt/php-soc/php-mysql工作正常,并提到它们已经安装,重新启动Apache后,似乎它们没有启用。 例如,我无法定位mcrypt.so,运行php--ini会给出: 这是在我放置extension=mcrypt之后。所以在php中。伊尼。

  • 我使用此代码登录到外部系统: 我收到一种LoginResponse,但它没有价值。 LoginResponse类型仅包含: 我需要从标头访问UserAuth值,但这不包含在LoginResponse对象中。 SOAP 响应为: 如何访问标题信息,在本例中是UserAuth值? 我是否需要使用更低层次的东西并从soap响应中解析所需的值? 更新: 我认为我需要使用SAAJ使用自定义SOAP请求(类似

  • 我很难理解为什么左边的代码生成肥皂请求不起作用,但是如果我调整它到右边的内容,那么它就起作用了? 我添加了到我的java项目: 请注意,在上面没有前缀wsse的图片中,它不起作用。 我可以强制为 强制代码在中生成命名空间,而不是在部分中

  • 问题内容: 尝试指定自定义的肥皂标题。不知道如何填充SoapEnvelope.headerOut属性。 到目前为止我的代码? 这是标题WSDL提取… 问题答案: headerOut是您需要构建的Element []。 像这样 然后将其添加到数组中。

  • 我正在使用CXF Web客户端调用Soap Web服务。 WSDL2JAVA用于从wsdl生成Java代码。有来自soap头的信息,但生成的代码没有访问该头的方法。 如何通过CXF Web客户端获取标题信息?