Silence-wen 2018-06-29 01:51 采纳率: 100%
浏览 3776
已采纳

接口调用webservices出现ns1:Client.NoSOAPAction问题

写了一个javaweb项目,通过调用webservices,把webservices响应的报文提供给app端。使用的是HttpPost请求的webServices。
结果在pc浏览器直接输入javaweb接口地址调用webservices的时候,pc浏览器端报了:ns1:Client.NoSOAPAction。该如何解决,请大神赐教。

  • 写回答

2条回答 默认 最新

  • qq_22311283 2018-06-29 02:10
    关注

    1.先搭建一个WebService接口.

    接口类:
    Java代码 收藏代码
    package hello;

    public interface IHello {

    public String hello(String str,String str2) ;  
    

    }

    实现类:
    Java代码 收藏代码
    package hello;

    public class Hello implements IHello{

    public String hello(String str,String str2) {  
        return "Hello world ,i'am "+str+".   第二个参数 = "+str2 ;  
    }  
    

    }

    WebService.rar (9.8 MB)

    services.xml:
    Xml代码 收藏代码
    <?xml version="1.0" encoding="UTF-8"?>





    Hello

    rcfeng

    hello.IHello

    hello.Hello



    web.xml:
    Xml代码 收藏代码
    <?xml version="1.0" encoding="UTF-8"?>





    XFireServlet

    org.codehaus.xfire.transport.http.XFireConfigurableServlet

    0





    XFireServlet

    /services/*





    index.jsp



    注:这里使用XFire搭建WebService,固然需要引用XFire包,以及写法为XFire,不管用什么框架搭建WebService,访问原理都是一样的,所以用任何的客户端都可以访问,需要导入的包在文章尾部注明.

    2.下面介绍调用WebService的两种客户端:

    2.1 XFire客户端:

    XFire客户端访问WebService,需要模拟出WS的接口,接口的结构一般定义接口的服务商会提供,如果是自己写的那就更明确了..

    模拟WebService接口(这个接口写法跟WS服务器是一样的,但不是同一个项目也不是同一个类):

    客户端接口类:
    这里起名AnyName,意思是任何模拟接口的任何名字都可以,只要需要调用的方法的结构与WS相同即可.
    Java代码 收藏代码
    package xfire;

    public interface IAnyName {

    public String hello(String str,String str2) ;  
    

    }

    客户端调用类,测试类:
    Java代码 收藏代码
    package xfire;

    import org.codehaus.xfire.XFire;

    import org.codehaus.xfire.client.XFireProxyFactory;

    import org.codehaus.xfire.service.Service;

    import org.codehaus.xfire.service.binding.ObjectServiceFactory;

    public class XFireTest {

    public static void main(String[] args) {  
    
        try {  
    
            String url = "http://localhost:9415/rcfeng-WebService/services/Hello" ;  
    
            Service service = new ObjectServiceFactory().create(IAnyName.class) ;  
    

    // XFire fire=XFireFactory.newInstance().getXFire();

    // XFireProxyFactory factory=new XFireProxyFactory(fire);

    XFireProxyFactory factory = new XFireProxyFactory() ;

            IAnyName hello = (IAnyName) factory.create(service,url) ;  
    
            String str = hello.hello("rcfeng","Parameter two") ;  
    
            System.out.println(str);  
    
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    
    }  
    

    }

    2.2 Axis客户端:
    Java代码 收藏代码
    package axis;

    import org.apache.axis.client.Call;

    import org.apache.axis.client.Service;

    import org.apache.axis.encoding.XMLType;

    public class AxisTest {

    public static void main(String[] args) {  
    
        try {  
    
            String str = "rcfeng" ;  
            String endpoint = "http://localhost:9415/rcfeng-WebService/services/Hello" ;  
    
            Service service = new Service() ;  
    
            Call call = (Call) service.createCall() ;  
    
            call.setTargetEndpointAddress(endpoint) ;  
            call.setOperationName("hello") ;//ws方法名  
            //一个输入参数,如果方法有多个参数,复制多条该代码即可,参数传入下面new Object后面  
            call.addParameter("parameter1",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;  
            call.addParameter("parameter2",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;  
            call.setReturnType(XMLType.XSD_STRING) ;  
            call.setUseSOAPAction(true) ;  
    

    // call.setSOAPActionURI("http://172.20.35.123:6110/cea-ws/services/ChangeMemberPinService");

            String result = (String) call.invoke(new Object[]{str,"Parameter two"}) ;  
    
            System.out.println(result);  
    
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 android报错 brut.common.BrutException: could not exec (exit code = 1)
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择
  • ¥15 部分网页页面无法显示!