在WSDL2Java生成的stub中_call.invoke()之前尝试加入SOAPHeader,报NullPointerException错误,因为在此之前还没有生成SOAPEnvelope,在invoke()方法中才生成了SOAPEnvelope,有什么办法呢?高手支招啊!不胜感激!

解决方案 »

  1.   

    在生成stub类中的createCall()方法里面加入SOAPHeader的代码就可以了。好像是
    ...
    _call.addHeader(SOAPHeaderElement arg0);
    试试看
      

  2.   

    _call.addHeader(SOAPHeaderElement arg0);
    这个方法是没有错的,但是参数不知道如何写,俺最近也在搞这个,找了好多资料都没有相关的提示
      

  3.   

    好像都是需要得到SOAPEnvelope 这个属性才可以用
    但是用这个属性,基本上就看不到 invoke 这个方法了
      

  4.   

    兄弟不会是和我做一样的吧哈(也是UserInfo 哈),只要+在_call.invoke()之前            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
                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);这个样子就可以了
      

  5.   

    huing(缥缈孤风)说的是某个短信网关的调用吧:)似乎可行,没有测试。
    我自己使用的解决方法有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!
      

  6.   

    现在的问题是,客户的web service采用了https,即ssl协议,要求对内容进行加密处理,不知道哪位大虾有这方面的经验?
      

  7.   

    不是WSS4J 对是用来实现Web service 安全的么 ? 又熟悉的牛人么?给介绍一下吧