通过将 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;
}
我有一个包含 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;
}