写了一个javaweb项目,通过调用webservices,把webservices响应的报文提供给app端。使用的是HttpPost请求的webServices。
结果在pc浏览器直接输入javaweb接口地址调用webservices的时候,pc浏览器端报了:ns1:Client.NoSOAPAction。该如何解决,请大神赐教。
接口调用webservices出现ns1:Client.NoSOAPAction问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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.Helloweb.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(); } }
}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 2
悬赏问题
- ¥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 部分网页页面无法显示!