Java 无法使用HttpClient获取SOAP响应,但可以在SOAP UI中工作

Java 无法使用HttpClient获取SOAP响应,但可以在SOAP UI中工作,java,web-services,soap,wsdl,Java,Web Services,Soap,Wsdl,我正在尝试获取一个wsdl的响应。它在soapui中运行得非常好。我正在使用Httpclient方法获得响应。我得到的错误是 <soapenv:Fault xmlns:axis2ns22="http://www.w3.org/2003/05/soap-envelope"><soapenv:Code><soapenv:Value>axis2ns22:Client</soapenv:Value></soapenv:Code><soap

我正在尝试获取一个wsdl的响应。它在soapui中运行得非常好。我正在使用Httpclient方法获得响应。我得到的错误是

<soapenv:Fault xmlns:axis2ns22="http://www.w3.org/2003/05/soap-envelope"><soapenv:Code><soapenv:Value>axis2ns22:Client</soapenv:Value></soapenv:Code><soapenv:Reason><soapenv:Text xml:lang="en-US">The endpoint reference (EPR) for the Operation not found is  and the WSA Action = null</soapenv:Text></soapenv:Reason><soapenv:Detail/></soapenv:Fault></soapenv:Body></soapenv:Envelope>
axis2ns22:client找不到操作的端点引用(EPR),并且WSA操作=null
我无法理解它到底是什么。。我尝试过将text/xml作为内容类型,然后它说版本不匹配。我已经给出了应用程序/soap+xml,它适用于同一wsdl的两个其他web服务

Java代码

PostMethod method = new PostMethod(HttpClientRequest.getServerUrl());

    if(HttpClientRequest.getHttpRequestHeaderMap() != null) {
        final RequestEntity entity = new ByteArrayRequestEntity(HttpClientRequest.getRequestBodyAsBytes());
        method.setRequestEntity(entity);
        for(Map.Entry<String, String> entry : HttpClientRequest.getHttpRequestHeaderMap().entrySet()) {
            method.addRequestHeader(entry.getKey(), entry.getValue());
        }
    }     

   for (Map.Entry<String, String> entry : HttpClientRequest.getHttpPostParameters().entrySet()) {
        method.addParameter(entry.getKey(),entry.getValue());
    } 

    try {
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(Integer.parseInt(Util.getConfig("httpPost.connectionTimeout")));
        httpClient.getHttpConnectionManager().getParams().setSoTimeout(Integer.parseInt(Util.getConfig("httpPost.socketTimeout")));
        int statusCode = httpClient.executeMethod(method);
        String response = method.getResponseBodyAsString();
        HttpClientResponse.setResponseHeaders(method.getResponseHeaders());
        HttpClientResponse.setResponse(response);
PostMethod方法=新的PostMethod(HttpClientRequest.getServerUrl());
如果(HttpClientRequest.getHttpRequestHeaderMap()!=null){
final RequestEntity entity=new ByteArrayRequestEntity(HttpClientRequest.getRequestBodyAsBytes());
方法:setRequestEntity(实体);
for(Map.Entry:HttpClientRequest.getHttpRequestHeaderMap().entrySet()){
addRequestHeader方法(entry.getKey(),entry.getValue());
}
}     
对于(Map.Entry:HttpClientRequest.getHttpPostParameters().entrySet()){
addParameter方法(entry.getKey(),entry.getValue());
} 
试一试{
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(Integer.parseInt(Util.getConfig(“httpPost.connectionTimeout”));
httpClient.getHttpConnectionManager().getParams().setSoTimeout(Integer.parseInt(Util.getConfig(“httpPost.socketTimeout”));
int statusCode=httpClient.executeMethod(方法);
字符串响应=方法.getResponseBodyAsString();
HttpClientResponse.setResponseHeaders(方法.getResponseHeaders());
HttpClientResponse.setResponse(响应);

如果您使用的是axis,则可能缺少SOAPAction头。
至少在我使用它的时候(这是一段很长的时间),我被指示包含这样一个标题。

您的代码看起来有点复杂。以下是对我们有用的内容:

RequestEntity entity = new StringRequestEntity("SOAP_MSG", "text/xml", "UTF-8");
postMethod.setRequestEntity(entity);
postMethod.setRequestHeader("SOAPAction", "ACTION_URL");
//Create httpclient instance
httpclient.executeMethod(postMethod);

其中,
SOAP\u MSG
是实际的SOAP请求XML字符串。请检查您的WSDL以获取
操作\u URL

请共享您的code@Saurabh您是指XML请求对象?使用service@SaurabhJhunjhunwala,更新你能告诉我应该添加什么吗?