我正在尝试通过SOAP将XML文档发送到服务器,该服务器要求有效负载XML包含XML序言,例如<?xml version="1.0" encoding="utf-8" ?>
。以下内容与我正在使用的代码非常相似:
SOAPMessage soapMessage = MessageFactory.newInstance().createMessage();
SOAPPart soapPart = getSoapMessage().getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/");
soapHeader = envelope.getHeader();
soapBody = envelope.getBody();
soapHeader.detachNode();
SOAPBodyElement bodyElement = soapBody.addBodyElement(getEnvelope().createName("my_element_name"));
bodyElement.addAttribute(getEnvelope().createName("my_attribute_name"), "my_attribute_value");
bodyElement.addChildElement("my_child_element");
...
答案 0 :(得分:1)
XML prolog只能存在于XML文档的最开头。
根据此处提供的XML规范:http://www.w3.org/TR/2000/REC-xml-20001006#sec-prolog-dtd
因此,在SOAP文档中编写一个prolog是无效的 - 我怀疑你会找到一个允许你这样做的SOAP库或实现。可能需要您和/或您的“客户”在要求时误解。文档类型声明必须出现在文档中的第一个元素之前。
您可以尝试使用XML验证器软件(例如http://www.w3schools.com/xml/xml_validator.asp),它应该报告您预期结果的错误。
答案 1 :(得分:1)
以下是在第一个SOAP Envelope
标记之前添加xml prolog声明的方法:
soapMessage.setProperty(SOAPMessage.WRITE_XML_DECLARATION, Boolean.TRUE.toString());