调用java的webservice forbidden_关于axis2调用webservices出现错误:org.apache.axis2.AxisFault: 服务器无法处理请求。 ---> 未将对...

在尝试从Java项目中调用C# WebService接口时遇到错误:'服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。'。错误出现在Utils.getInboundFaultFromMessageContext方法。然而,调用公开的WebService接口则没有问题。代码示例展示了如何创建并发送请求,包括设置命名空间、方法名、SOAPAction等。问题可能在于配置或参数设置。

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

javaFay 发布于 2013/01/08 10:10

阅读 47K+

收藏 0

我这边是java项目,调用外部系统(C#)的webservices接口,但是出现以下错误:

Exception in thread "main" org.apache.axis2.AxisFault: 服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。

at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)

at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:375)

at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)

at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)

at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)

at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:555)

at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:531)

at com.gzedu.lms.studyHourReport.CheckSingleSignOn.sendToServiceByWebService(CheckSingleSignOn.java:84)

at com.gzedu.lms.studyHourReport.CheckSingleSignOn.main(CheckSingleSignOn.java:135)

但是调用网上开放的webservice接口没有问题! 具体代码如下:

import java.util.HashMap;

import java.util.Map;

import org.apache.axiom.om.OMAbstractFactory;

import org.apache.axiom.om.OMElement;

import org.apache.axiom.om.OMFactory;

import org.apache.axiom.om.OMNamespace;

import org.apache.axiom.soap.SOAP11Constants;

import org.apache.axiom.soap.SOAP12Constants;

import org.apache.axis2.Constants;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.client.ServiceClient;

import org.apache.axis2.transport.http.HTTPConstants;

import com.gzdec.common.config.AppConfig;

import com.gzdec.common.config.AppConfigException;

public class CheckSingleSignOn {

// 接口命名空间名

private  String omNameSpace;

// 接口方法名

private  String methodName;

// 接口WebService地址

private  EndpointReference targetEPR ;

// 接口SOAPAction

private  String action ;

public CheckSingleSignOn(){

try {

targetEPR=new EndpointReference(AppConfig.getProperty("provinceSysUrl"));

omNameSpace=AppConfig.getProperty("provinceSysNameSpace");

action="http://tempuri.org/ImportData";

methodName="ImportData";

} catch (AppConfigException e) {

e.printStackTrace();

}

}

/**

* 使用token返回的paramter访问webservice

* @param formMap

*

@return

* @throws Exception

*/

public String sendToServiceByWebService(Map formMap) throws Exception {

/*String parseMessage=getAPIAttribute(formMap);

if(!parseMessage.equals(""))

return parseMessage;*/

OMFactory fac = OMAbstractFactory.getOMFactory();

OMNamespace omNs = fac.createOMNamespace(omNameSpace, "");

// 请求参数设置

Options options = new Options();

options.setTo(targetEPR);

options.setTransportInProtocol(Constants.TRANSPORT_HTTP);// 设定传输协议

options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);// 设定SOAP版本soap1.2

options.setTimeOutInMilliSeconds(600000L);//1分钟超时

options.setAction(action);

options.setProperty(HTTPConstants.CHUNKED, "false");//设置不受限制.

// 客户端绑定参数设置

ServiceClient sender = null;

sender = new ServiceClient();

sender.setOptions(buildOptions());

// 设定访问的接口方法

OMElement method = fac.createOMElement(methodName, omNs);// 要调用的接口方法名称

OMElement sysId = fac.createOMElement("SystemID", omNs);// 方法的第一个参数名称

OMElement password = fac.createOMElement("SystemPwd", omNs);// 方法的第二个参数名称

OMElement data = fac.createOMElement("Data", omNs);// 方法的第三个参数名称

sysId.addChild(fac.createOMText(sysId, "71D05F8D-E74A-4E53-9265-9BF0D14C7C64"));// 设定参数的值

method.addChild(sysId);

password.addChild(fac.createOMText(password, "597sTmD53"));// 设定参数的值

method.addChild(password);

PottingXmlData p = new PottingXmlData();

data.addChild(fac.createOMText(data, AESWithJCE.Encrypto(p.pottingCheckUserData(formMap))));// 设定参数的值

method.addChild(data);

// 设定其他方法参数,针对参数是数组的情况如何处理?可以考虑为参数添加child,

OMElement result = sender.sendReceive(method);// 调用接口方法

String msg = result.toString();

sender.cleanupTransport();//关闭资源

sender.cleanup();

sender = null;

return isUserLogin(msg,formMap);

}

public String isUserLogin(String msg, Map formMap) {

if(msg.equals("")){

return "未返回参数!";

}else{

return msg;

}

}

/**

* @see 设置连接属性

*

@return

*/

public Options  buildOptions(){

Options options = new Options();

options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);

options.setAction(action);

options.setTo(targetEPR);

options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

options.setProperty(HTTPConstants.CHUNKED, "false");//设置不受限制.

options.setProperty(Constants.Configuration.HTTP_METHOD,HTTPConstants.HTTP_METHOD_POST);

options.setAction(action);

return options;

}

/**

* 测试

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception {

CheckSingleSignOn util = new CheckSingleSignOn();

Map map = new HashMap();

map.put("USER_ID", "123456789");

map.put("REALNAME", "测试");

map.put("PAPERS_NUMBER", "441301119890001546");

String result = util.sendToServiceByWebService(map);

System.out.println("toString====" + result);

}

}

SystemID,SystemPwd,Data 这3个参数是这个接口所需的

AESWithJCE.Encrypto(p.pottingCheckUserData(formMap))) 返回的是一个加密后的字符串(因接口方法需要加密传输数据)

传上所调用接口的wsdl内容截图,大家帮忙看看我是不是哪里设置错了,问题折腾我几天了,百度谷歌都试过了,无尽感激!

1f23e088d0f39fec23020f1c388896ca.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值