2013-02-03 44 views
1

我希望得到一个消息,看起来像这样:在SOAPBodyElement上删除Body属性/前缀,我该怎么办?

<?xml version="1.0" encoding="UTF-8"?> 
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" 
xmlns="http://website.com/"> 
    <S:Header/> 
    <S:Body> 
     <subscriberCreate> 
     <assignedId>Some ID</assignedId> 
     </subscriberCreate> 
    </S:Body> 
</S:Envelope> 

,但得到的消息,看起来像这样(要摆脱的xmlns =“的” subscriberCreate后):

<?xml version="1.0" encoding="UTF-8"?> 
    <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" 
    xmlns="http://website.com/"> 
    <S:Header/> 
     <S:Body> 
      <subscriberCreate xmlns=""> 
       <assignedID>Some ID</assignedID> 
      </createSubscriber> 
     </S:Body> 
    </S:Envelope> 

任何人知道该怎么做才能解决这个问题? body元素是否继承了信封中的属性,因为当我改变了它们的顺序时,消息消失了! 谢谢!

我的Java代码如下所示:

import java.io.FileOutputStream; 

import javax.xml.soap.MessageFactory; 
import javax.xml.soap.SOAPBody; 
import javax.xml.soap.SOAPBodyElement; 
import javax.xml.soap.SOAPConstants; 
import javax.xml.soap.SOAPEnvelope; 
import javax.xml.soap.SOAPMessage; 
public class CreateSubscriber { 

    public static void main(String[] args) { 

     try{ 

      SOAPMessage sm = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL).createMessage(); 

      SOAPEnvelope env = sm.getSOAPPart().getEnvelope(); 
      env.setPrefix("S"); 
      env.removeNamespaceDeclaration("env"); 
      sm.getSOAPHeader().setPrefix("S"); 
      SOAPBody body = sm.getSOAPBody(); 


      body.setPrefix("S"); 

      SOAPBodyElement element = body.addBodyElement(env.createName("createSubscriber")); 
      env.setAttribute("xmlns","http://psm.proceranetworks.com/soap/3.1/message"); 
      element.addChildElement("assignedID").addTextNode("Some ID"); 

      FileOutputStream fOut = new FileOutputStream("SoapMessage.xml"); 
      String stdEncode = "<xml version= 1.0 encoding= utf-8>"; 
      System.out.print(stdEncode); 
      sm.writeTo(System.out); 


      fOut.write(stdEncode.getBytes()); 
      sm.writeTo(fOut); 

      System.out.println(); 

      System.out.println("SOAP msg created"); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 
+0

更改此行? 'SOAPBodyElement element = body.addBodyElement(env.createName(“createSubscriber”));' –

+0

想要摆脱文本** xmlns =“”**!但是,无论如何感谢 – user1715352

回答

0

编辑: '?'

我想你的代码,你就错过了报价和德在您的交流字符串中:

String stdEncode = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; 
+0

不,还是一样的问题。正如我所评论的,想要在文本** subscriberCreate ** – user1715352

+0

之后摆脱文本xmlns =“”我已经在API中读取了方法addChildElement嵌入了任何范围内的命名空间。我能解决这个问题吗? – user1715352

+0

我认为问题在于你试图实现的是违反XML规范:/ –

相关问题