java调用webservice接口提示“服务器未能识别 HTTP 头 SOAPAction 的值“&&服务器无法处理请求。 ---> 未将对象引用设置到对象的实例

本文介绍了一种在调用WebService接口时遇到的问题——服务器未能识别SOAPAction的值,并提供了具体的解决方案,包括如何设置SOAPAction以及参数调整的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在调用外部webservice接口时,发现接口返回的错误信息提示为:

服务器未能识别 HTTP 头 SOAPAction 的值

我们之前与其他厂商(采用PHP、C#、JAVA开发)都进行过联调,不存在类似问题。
附代码:
String endpoint = “调用地址”;
org.apache.axis.client.Service service = new org.apache.axis.client.Service();
Call call = null;
try {
call = (Call) service.createCall();
} catch (ServiceException e) {
e.printStackTrace();
}
call.setTargetEndpointAddress(endpoint);
call.setOperationName(new QName(endpoint, “方法名”));
call.addParameter(“属性1”, XMLType.XSD_LONG, ParameterMode.IN);

调用接口的代码采用axis开发,经过研究发现,外部接口开发商使用.NET进行开发,在接口中设置了soapaction。具体的信息可以通过webservice的wsdl查看,在wsdl直接搜索action就能看到,不同方法可能对应不同的soapaction,在调用时需要注意。
修改之后的代码:
String endpoint = “调用地址”;
org.apache.axis.client.Service service = new org.apache.axis.client.Service();
Call call = null;
try {
call = (Call) service.createCall();
} catch (ServiceException e) {
e.printStackTrace();
}
call.setTargetEndpointAddress(endpoint);
call.setUseSOAPAction(true);
call.setSOAPActionURI(“查询到的soapaction”);

call.setOperationName(new QName(endpoint, “方法名”));
call.addParameter(“属性1”, XMLType.XSD_LONG, ParameterMode.IN);

-----------------时间线---------------------------

webservice接口报错信息: 服务器无法处理请求。 —> 未将对象引用设置到对象的实例

axis调用代码:
String endpoint = “webservice地址”;
Service service = new Service();
Call call = null;
try {
call = (Call) service.createCall();
} catch (ServiceException e) {
e.printStackTrace();
}
call.setUseSOAPAction(true);
call.setSOAPActionURI(“webservice接口的soapaction”);
call.setTargetEndpointAddress(endpoint);
call.setOperationName(new QName(“webservice的namepace”, “方法名”));
call.addParameter(“属性名”, XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnClass(String.class);
String result = null;
try {
result = (String) call.invoke(new Object[] {“1”});
} catch (RemoteException e) {
e.printStackTrace();
}

修改之后就不会报错,修改的内容如下:
String endpoint = “webservice地址”;
Service service = new Service();
Call call = null;
try {
call = (Call) service.createCall();
} catch (ServiceException e) {
e.printStackTrace();
}
call.setUseSOAPAction(true);
call.setSOAPActionURI(“webservice接口的soapaction”);
call.setTargetEndpointAddress(endpoint);
call.setOperationName(new QName(“webservice的namepace”, “方法名”));
call.addParameter(new QName(“http://tempuri.org/”, “属性名”), XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnClass(String.class);
String result = null;
try {
result = (String) call.invoke(new Object[] {“1”});
} catch (RemoteException e) {
e.printStackTrace();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值