2015-09-04 69 views
1

我正在java中创建一个简单的soap客户端负载,但服务器回答说“服务器无法识别http标头的值”。我复制创建的肥皂有效载荷并粘贴到SOAP-UI并执行请求,有效负载完美工作。Java创建Soap客户端没有得到响应,但SOAPUI正在工作

我也复查了肥皂头信息。一切都是正确的。但我仍然没有从我的Java客户端得到回应。

任何人都可以提供任何想法吗?

public class SoapClientClass { 

public static void main(String[] args) throws UnsupportedOperationException, SOAPException, IOException, TransformerException { 
    // TODO Auto-generated method stub 

    //Getting an instance of Soap Connection factory 
    SOAPConnectionFactory myFct = SOAPConnectionFactory.newInstance(); 
    //Getting a Soap Connection from the soap connection factory object 
    SOAPConnection myCon = myFct.createConnection(); 
    //Getting a message factory object to create a message 
    MessageFactory myMsgFct = MessageFactory.newInstance(); 
    //Using the message factory to create a message 
    SOAPMessage message = myMsgFct.createMessage(); 
    //Adding message to the body 

    SOAPPart mySPART = message.getSOAPPart(); 
    SOAPEnvelope myEnvp = mySPART.getEnvelope(); 
    myEnvp.addNamespaceDeclaration("web","http://www.webservicex.net/"); 
    //SOAPHeader header = myEnvp.getHeader(); 
    //javax.xml.soap.Name HeaderName = myEnvp.createName("GetGeoIP", "web","http://www.webservicex.net/"); 
    //SOAPHeaderElement hltp = header.addHeaderElement(HeaderName); 
    SOAPBody body = myEnvp.getBody();  
    javax.xml.soap.Name bodyName = myEnvp.createName("GetGeoIP", "web","http://www.webservicex.net/");      
    SOAPBodyElement gltp = body.addBodyElement(bodyName); 

    javax.xml.soap.Name myContent = myEnvp.createName("IPAddress","web", "http://www.webservicex.net/");   
    SOAPElement mySymbol = gltp.addChildElement(myContent);  
    mySymbol.addTextNode("192.128.62.43");    
    message.saveChanges(); 
    message.writeTo(System.out); 
    URLEndpoint endPt = new URLEndpoint("http://www.webservicex.net//geoipservice.asmx"); 
    SOAPMessage reply = myCon.call(message, endPt); 
    //reply.writeTo(System.out);  
    System.out.println("\n"); 
    TransformerFactory tff = TransformerFactory.newInstance(); 
    Transformer tf = tff.newTransformer(); 

    Source sc = reply.getSOAPPart().getContent(); 
    StreamResult result = new StreamResult(System.out); 
    tf.transform(sc, result); 
    System.out.println("test"); 
    //conn.close(); 

    SOAPBody body1 = reply.getSOAPBody(); 
    if (body1.hasFault()) { 
     SOAPFault newFault = body1.getFault(); 
     QName code = newFault.getFaultCodeAsQName(); 
     String string = newFault.getFaultString(); 
     String actor = newFault.getFaultActor(); 
     System.out.println(string); 
    } 

    myCon.close(); 
    //System.out.println(reply);    
} 
+0

为什么不使用jax-ws而不是手动构建整个肥皂? – MGorgon

+0

即使是手动实现,Payload也可以,因为这已在SOAP-ui中进行了测试。 –

+0

此外,我试图连接到代理服务器,服务器没有响应任何数据。我仔细检查了EPR和其他东西。 –

回答

0

这是非常古老的请求,但如果有人可能遇到类似的问题,仍然会回答。根据错误,它期待HTTP头SOAPAction。以上代码需要两行HTTP头文件设置代码。

SOAPEnvelope myEnvp = mySPART.getEnvelope(); 

MimeHeaders mheader=message.getMimeHeaders(); 
mheader.setHeader("SOAPAction", "http://www.webservicex.net/GetGeoIP"); 

myEnvp.addNamespaceDeclaration("web","http://www.webservicex.net/"); 
相关问题