首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建SOAP请求时与命名空间相关的错误

创建SOAP请求时与命名空间相关的错误
EN

Stack Overflow用户
提问于 2014-08-25 05:59:25
回答 1查看 1.7K关注 0票数 1

我的尝试是从以下SOAPBody内容创建多个soap消息--只是一个示例消息,而不是实际的soap消息。每个EmpId都会有单独的请求。

代码语言:javascript
运行
复制
<Request>
  <EMPId>?</EMPId>
</Request>

我使用以下代码将上述请求字符串转换为文档对象。

代码语言:javascript
运行
复制
DocumentBuilder parser = factory.newDocumentBuilder();
            Document doc = parser.parse(new InputSource(new ByteArrayInputStream(xmlString.getBytes())));

一旦我有了文档,我就可以通过替换SOAPBody值来创建EMPId。

现在,我必须为每个创建的SOAPMessages创建单独的SOAPBody。

为此,我使用以下代码。

代码语言:javascript
运行
复制
private static String cretaeSOAPMessage(Document soapBodyDoc, String serverURI, String soapAction){
    String soapMsg = null;

    try {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration("v1",serverURI);

        SOAPBody soapBody = envelope.getBody();

        soapBodyDoc.setPrefix("v1");
        soapBody.addDocument(soapBodyDoc);

        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader("SOAPAction", serverURI  + soapAction);

        soapMessage.saveChanges();

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        try {
            soapMessage.writeTo(out);
        } catch (IOException e) {
            e.printStackTrace();
        }
        soapMsg = new String(out.toByteArray());

    } catch (SOAPException e) {
        e.printStackTrace();
    }


    return soapMsg;
}

但是,在执行内容'soapBodyDoc.setPrefix("v1");‘行时,我得到了以下错误

线程"main“org.w3c.dom.DOMException: NAMESPACE_ERR中的异常:尝试以与命名空间有关的不正确的方式创建或更改对象。

我试图在创建SOAPBody的地方添加名称空间预基,即使这种能力得到了实现。如何避免此错误并向SOAPBody添加命名空间前缀?

EN

回答 1

Stack Overflow用户

发布于 2014-08-25 07:01:36

解决了。名称空间声明从信封中移除并添加到正文中。

代码语言:javascript
运行
复制
   MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage soapMessage = messageFactory.createMessage();
    SOAPPart soapPart = soapMessage.getSOAPPart();
    SOAPEnvelope envelope = soapPart.getEnvelope();

    SOAPBody soapBody = envelope.getBody();


    soapBody.addDocument(soapBodyDoc);
    **soapBody.addNamespaceDeclaration("", serverURI);**

前缀被移除,因为原始前缀没有任何前缀。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25479797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档