原因
可能是子节点使用了namespace,但缺少URL
解决方法
创建带前缀及相应url的QName,将QName添加到父节点
//创建SoapMessage
SOAPMessage soapmessage = MessageFactory.newInstance().createMessage();
//创建SoapPart
SOAPPart soappart = soapmessage.getSOAPPart();
//创建SoapEnvelope
SOAPEnvelope soapenvelope = soappart.getEnvelope();
//创建Header
SOAPHeader soapheader = soapenvelope.getHeader();
//创建命名空间声明
//维度没有第一个?说明第一个是默认的
SOAPElement ivpn = soapenvelope.addNamespaceDeclaration(VPN, VPN_URL);
//通过envelope对象获取body对象
SOAPBody soapbody = soapenvelope.getBody();
QName ename = new QName(VPN_URL,"name", VPNPrefix);
SOAPBodyElement ele = soapbody.addBodyElement(ename);
QName childEname = new QName(VPN_URL,"childName", VPNPrefix);
ele.addChildElement(childEname).setValue(o);
soapmessage.saveChanges();
/* Print the request message */
System.out.print("Request SOAP Message = ");
soapmessage.writeTo(System.out);
System.out.println();