本人最近遇到一个问题,在JAVA调用WEBSERVICE的时候,报错:Server was unable to process request. ---> Object reference not set to an instance of an object,但是WEBSERVICE端是好的,不知道哪位大侠能指点一下,具体的代码如下
public static void main(String[] args) { try {
System.out.println("====begin====");
String endpoint = "http://ip:port/IctService.asmx?wsdl";//恕不方便透露IP // 直接引用远程的wsdl文件 // 以下都是套路
Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName("http://tempuri.org/", "IfService")); call.addParameter("ifCode",
org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);// 接口的参数
call.addParameter("ifPass",
org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);// 接口的参数

call.addParameter("ifCode",
org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);// 接口的参数
call.addParameter("ifEvent",
org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);// 接口的参数
call.addParameter("info",
org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);// 接口的参数 call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型
 call.setUseSOAPAction(true);
         call.setSOAPActionURI("http://tempuri.org/IfService");

         
String result = (String) call.invoke(new Object[] { null,null,"bbb",null,"aaa" });
          // 给方法传递参数,并且调用方法 System.out.println("result is " + result); } catch (Exception e) {
e.printStackTrace();
} }

解决方案 »

  1.   

    wsdl 的方式 你只需要下载xfire插件 然后用这个插件自动生成代码  然后调用就ok
    如果不懂请搜索xfire
      

  2.   

    去下载个soapUI 用这个能直接通过你的wsdl地址生产客户端代码 相信我没错~
      

  3.   

    我最近也在看webservice ,异步调用过程没有发生,同步调用结果正常,生成的时候是对的,请问下这会是哪方面的原因?
      

  4.   

    太麻烦了,你用Eclipse自动生成代码然后参考一下吧 webservice这种东西都是发展很久的东西了基本上暴露和使用都是全自动的,我用过xFire还不错哦配置好后在Service层加注解就暴露成webservice了,调用代码也是根据wsdl自动生成
    暴露像这样@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
    @Service("ServiceName")
    @WebService(serviceName = "WebServiceName", endpointInterface = "包名)然后web.xml加上spring,xfire配置 <!-- Spring3 Xfire配置 -->
    <servlet>
    <servlet-name>XFireServlet</servlet-name>
    <servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class>
    </servlet> <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/servlet/XFireServlet/*</url-pattern>
    </servlet-mapping> <servlet-mapping>
    <servlet-name>XFireServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
    </servlet-mapping>最后在spring配置文件加上<!-- 支持webService注解 -->
    <bean id="webAnnotations"
    class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" />
    <bean id="jsr181HandlerMapping" class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping">
    <property name="xfire" ref="xfire" />
    <property name="webAnnotations" ref="webAnnotations" />
    </bean>
    感觉这样写webService太轻松了正常的写你的service层需要暴露加上@WebService url给调用方生成调用代码完事
      

  5.   

    MyEclipse可以对WebService自动解析的客户端那个超简单,