如何使用JAVA库更改XML SOAP信封?

如何使用JAVA库更改XML SOAP信封?,java,web-services,soap,wsdl,javax.xml,Java,Web Services,Soap,Wsdl,Javax.xml,我使用javax.xml.soap库来调用soap请求和响应。我有wsdl端点url,它在SOAP-UI中运行良好。我需要使用java验证同样的问题,我创建了一个soap请求,它看起来与实际的evnelop不同,如下所示 JAVA请求有效负载: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webservicex.com/">

我使用javax.xml.soap库来调用soap请求和响应。我有wsdl端点url,它在SOAP-UI中运行良好。我需要使用java验证同样的问题,我创建了一个soap请求,它看起来与实际的evnelop不同,如下所示

JAVA请求有效负载:

   <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webservicex.com/">
     <SOAP-ENV:Header/>
       <SOAP-ENV:Body>
       <web:GetCitiesByCountry>
       <web:CountryName>US</web:CountryName>
       </web:GetCitiesByCountry>
     </SOAP-ENV:Body>
   </SOAP-ENV:Envelope>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET">
     <soapenv:Header/>
       <soapenv:Body>
        <web:GetCitiesByCountry>
        <!--Optional:-->
        <web:CountryName>US</web:CountryName>
        </web:GetCitiesByCountry>
      </soapenv:Body>
</soapenv:Envelope>
我复制了请求负载,并将信封从SOAP-ENV更改为sopaenv,并在SOAPUI中调用它,它将返回适当的响应。有人能告诉我如何使用java库更改信封标签吗。

你能用
String serverURI=”http://www.webserviceX.NET";
而不是


String serverURI=”http://www.webservicex.com/";

我也试过了。请查找堆栈跟踪:服务器未识别HTTP头SOAPAction的值:。问题是java找不到包含将传入字节流反序列化为java类的规则的架构或xsd。最直接的方法是设置一个。Maven作业,它将接收wsdl并为您生成Jaxb类。
<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><soap:Fault><faultcode>soap:Client</faultcode><faultstring>System.Web.Services.Protocols.SoapException: Server did not recognize the value of HTTP Header SOAPAction: http://www.webservicex.com/GetCitiesByCountry.
   at System.Web.Services.Protocols.Soap11ServerProtocolHelper.RouteRequest()
   at System.Web.Services.Protocols.SoapServerProtocol.RouteRequest(SoapServerMessage message)
   at System.Web.Services.Protocols.SoapServerProtocol.Initialize()
   at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean&amp; abortProcessing)</faultstring><detail /></soap:Fault></soap:Body></soap:Envelope>
    private static SOAPMessage createSOAPRequest() throws Exception 
     {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();

        //Tried to change the envelop which is not working
        /*MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
        SOAPMessage soapMessage =     messageFactory.createMessage();
        soapMessage.getSOAPPart().setPrefix("soapenv");
        soapMessage.getSOAPPart().removeMimeHeader("SOAP-ENV");
        soapMessage.getSOAPHeader().setPrefix("soapenv");
        soapMessage.getSOAPBody().setPrefix("soapenv");
        messageFactory.createMessage();*/
        SOAPPart soapPart = soapMessage.getSOAPPart();

        String serverURI = "http://www.webservicex.com/";

        // SOAP Envelope
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration("web", serverURI);

        // SOAP Body
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement(
                "GetCitiesByCountry", "web");
        SOAPElement soapBodyElem1 soapBodyElem.addChildElement("CountryName",
                "web");
        soapBodyElem1.addTextNode("US");

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

        System.out.println(soapMessage.getSOAPBody());
        soapMessage.saveChanges();

        /* Print the request message */
        System.out.print("Request SOAP Message:");
        soapMessage.writeTo(System.out);
        System.out.println();

        return soapMessage;
      }