在WSDL2Java生成的stub中_call.invoke()之前尝试加入SOAPHeader,报NullPointerException错误,因为在此之前还没有生成SOAPEnvelope,在invoke()方法中才生成了SOAPEnvelope,有什么办法呢?高手支招啊!不胜感激!
解决方案 »
- 求助在线考试系统,倒计时提交js代码!
- 求java高手解答
- hibernate+存储过程+sql server 2005
- Hibernate映射文件写法问题
- 关于FreeMarker问题---在线等
- 杭州阿思拓信息科技有限公司java怎么样
- 空指针 super.getHibernateTemplate().get(Users.class, id)
- myeclipse中的database BROWSER
- 请教一个javamail的问题
- 关于Struts的一个简单问题!!在线等待
- 关于用多态取代条件判断(if/swith)得问题?
- 为什么:java中的URL类无法创建这个对象 java高手请进来!!!
...
_call.addHeader(SOAPHeaderElement arg0);
试试看
这个方法是没有错的,但是参数不知道如何写,俺最近也在搞这个,找了好多资料都没有相关的提示
但是用这个属性,基本上就看不到 invoke 这个方法了
String now = sdf.format(new Date());
String signStr = MD5Sign("000004" + now + MD5Sign("88888888"));
Name headerName = new PrefixedQName(new QName("http://www.ips.com.cn/IpsServices", "UserInfo"));
SOAPHeaderElement head = new SOAPHeaderElement(headerName);
head.setActor(null);
try{
head.addChildElement("UserCode").addTextNode("000004");
head.addChildElement("MyKey").addTextNode(now);
head.addChildElement("SignStr").addTextNode(signStr);
}catch(Exception e){
System.out.println(" soapheader Exception == ");
e.printStackTrace();
}
_call.addHeader(head);这个样子就可以了
我自己使用的解决方法有2个:
1.使用手工构造SOAPEnvelope,加入SOAPHeader和SOAPBody,比较土一点...
2.根据客户的wsdl生成Authentication类,此类实现了java.io.Serializable接口,实现了相关的方法,并且定义了和wsdl对应的Type metadata。在Axis生成的Stub的_initOperationDesc1()中初始化操作时,增加代码:
param = new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://example.com/", "Authentication"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://example.com/", "Authentication"), Authentication.class, true, false);
//注意此处的倒数第二个参数为true,表示这个参数增加到SOAPHeader中
param.setOmittable(false);
oper.addParameter(param);
调用的时候,要多加一个Authentication的实例参数(位置和前面加param的相对位置一样),ok!