通过将 XML 文件解析为 SOAPMessage,使用 javax.xml.soap API 构建更大的 SOAP 请求

Building larger SOAP requests with javax.xml.soap API by parsing an XML file to a SOAPMessage

我有一个包含 SOAP 请求的 XML 文件,其中包含大约 150 多个句子,我想通过 javax.xml.soap API 在我的 JavaProject 中发送这个 soap 请求。所以通常您使用以下过程构建 soap 请求:

SOAPBody soapBody = envelope.getBody();
        SOAPElement soapServiceElem = soapBody.addChildElement("SomeRandomServiceName", "int");
        SOAPElement soapInputMetaDataElem = soapServiceElem.addChildElement("inputMetaData");
        SOAPElement soapVersionElem = soapInputMetaDataElem.addChildElement("version");
        SOAPElement soapVersionText = soapVersionElem.addTextNode("V_1");
        ...

等等..但是如果我想构建更大的 SOAP 请求,这似乎有点过分了。是否有另一种 "better" 方法来构建 SOAP 请求?是否可以选择将 XML 文件放置为 String 并将其解析为 SOAPMessage ?是否有类似内置函数的东西来将 String 解析为 SOAPMessage 还是我必须自己编写一个?

甚至更好:是否可以将请求 XML 文件放在我的项目目录中,然后将其作为 soap 请求发送?如果是,怎么做?

假设您在 request.xml 中提出了请求。您可以执行以下操作:

org.w3c.Document document = //read dom from request.xml
soapBody.addDocument(document);

有关详细信息,请参阅 SoapBody#addDocument(Document)

我创建了自己的 class,它接收一个 FileInputStream 并从中构建一个 soapMessage

private static SOAPMessage createSOAPRequest(FileInputStream requestFile, String serverURI, String serviceName) throws Exception {
        MessageFactory messageFactory = MessageFactory.newInstance();
        MimeHeaders headers = new MimeHeaders();

        SOAPMessage soapMessage = messageFactory.createMessage(headers, requestFile);
        requestFile.close();

        String authorization = new sun.misc.BASE64Encoder().encode((username+":"+password).getBytes());
        headers = soapMessage.getMimeHeaders();
        headers.addHeader("SOAPAction", serverURI  + serviceName);
        headers.addHeader("Authorization", "Basic " + authorization);
        soapMessage.saveChanges();

        return soapMessage;
    }