请问:JSP如何调用远程的WebService 本帖最后由 dingjk007 于 2010-12-31 11:03:53 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在jsp中调用webservice和在java中调用方法是一样的。 参考今天在写webservice服务端写好之后(第一次写webservice)相关阅读:怎么写webservice。那现在来说说webservice客户端怎么写?第一次写webservice感觉过程还是挺扭曲的;但是发现用MyEclipse来生成webservice真是很简单;不过倒是webservice和Struts2的集成还有和spring的集成倒是花了不少时间,下面看看webservice客户端的写法:如果你要用MyEclipse自动生成的一些客户端代码,那里面的东西可能比较多;它自动生成的代码里面包含了可以对wsdl文件进行分析的方法,我们如果只是为了调用webservice,那么我们的客户端没有必要用那个自动生成。我们来看看webservice客户端的写法:String result = "";//这里是返回结果webservice的返回结果try{Client client = new Client(new URL("http://localhost:8080/services/JgzsService?wsdl"));//这里是调用webservice的地址Object[] res = client.invoke("saveJgzsContent", new Object[] {"title","content"});//这里的res是webservice返回的结果是一个object数组,saveJgzsContent是调用webservice的方法,new Object[] {"title","content"});这里是被调用webservice的方法,这里有两个参数result = (String) res[0];System.out.println (result);} catch (Exception e) {e.printStackTrace();// return result;} } 把客户端调用的地址localhost:8080改成服务器的地址就行了 我不是想搭建WebService,有现成的WebService,我只是想调用WebService,并获得返回的XML数据,第一次做这个,所以不太了解,我的框架是STRUTS 1 框架,如果需要调用WebService的话,都需要配置哪些写哪些?JSP,ACTION里面分别都写什么?可以提供点DEMO么? 调用的时候很简单 你只要知道 所调用方法的接口就可以了 public static void main(String[] args) { String targetEndPoint = "http://135.224.78.18:8080/Indicator/services/FunctionUtils"; Service ser = new Service(); try { Call call = (Call) ser.createCall(); call.setTargetEndpointAddress(targetEndPoint); //获取指标信息 call.setOperation("getIndAndMeaAndDimInfoToXML");//调用的方法 String indAndMeaAndDimStr = (String) call.invoke(new Object[]{ new String("CYE6021200")});//方法中传递的参数 System.out.println("indAndMeaAndDimStr==========="+indAndMeaAndDimStr); //打印调用的方法所返回的结果 } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } 用AXIS2插件来生成wsdl的客户端,然后直接调用客户端生成的接口不就行了么? 不好意思,前段时间出差,一直没回帖,请问上面的Service ser = new Service();引的是JAVA的哪个Service包呢?是import com.sun.xml.internal.ws.wsdl.parser.Service;这个么?可是如果用的是这个包, new Service()里面让写参数,写什么参数呢?而且用这个包的话,ser.createCall();不好用的!请指教 我是这么写的,可是返回的结果不对,是我参数传错了么?参数应该怎么写呢?代码如下~/** * @param args */ public static void main(String[] args) throws ServiceException, RemoteException{ try { // 服务端的url,需要根据情况更改。 String endpointURL = "http://116.236.252.205/rt/Service.asmx?WSDL"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpointURL)); call.setSOAPActionURI("http://tempuri.org/" + "GetTrafficData"); call.setOperationName(new QName("Service", "GetTrafficData"));// 设置操作的名称。 // 由于需要认证,故需要设置调用的用户名和密码。 SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("http://tempuri.org/", "complexType"); soapHeaderElement.setNamespaceURI("http://tempuri.org/"); try { soapHeaderElement.addChildElement("strCustomID").setValue("user"); soapHeaderElement.addChildElement("strPassword").setValue("password"); soapHeaderElement.addChildElement("strResult").setValue("实时状况"); } catch (SOAPException e) { e.printStackTrace(); } call.addHeader(soapHeaderElement); call.setReturnType(XMLType.XSD_STRING);// 返回的数据类型 call.addParameter("op1", XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型 String ret = (String) call.invoke(new Object[] { "smg" });// 执行调用 System.out.println(ret); } catch (Exception e) { e.printStackTrace(); } }其中call.addParameter("", XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型 String ret = (String) call.invoke(new Object[] { "" });// 执行调用 这两个引号里应该写什么参数呢?下面的是SOAP1.2请求以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。POST /rt/Service.asmx HTTP/1.1Host: 116.236.252.205Content-Type: application/soap+xml; charset=utf-8Content-Length: length<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> <soap12:Body> <GetTrafficData xmlns="http://tempuri.org/"> <strCustomID>string</strCustomID> <strPassword>string</strPassword> <strResult>string</strResult> </GetTrafficData> </soap12:Body></soap12:Envelope>我返回的结果是:<TrafficData CustomID=""><Result ErrorCode="-10001" Message="用户不存在" /></TrafficData>请问是上面哪里写的错误了呢?在线等 这个Call和Service的包都是 axis下的包 org.apache.axis.client.Serviceorg.apache.axis.client.Call struts2 Date校验器!! 求教关于JAVA应用于网络的问题!! 关于java中动态生成报表的问题(swf) 错误1064.。 使用HttpSessionAttributeListener的困惑 JSP客户端脚本如何获取本地日期?在线等。 急!初学,jsp如何查询excel表中的数据并显示? Java调用NET编写的WebService问题 如何实现网页的自动刷新 如何修改IE打开的doc文档之后回传到服务器? 为什么JSP中这句简单的输出 总是报错 下学期学Jsp,来找点意见
try{
Client client = new Client(new URL("http://localhost:8080/services/JgzsService?wsdl"));//这里是调用webservice的地址
Object[] res = client.invoke("saveJgzsContent", new Object[] {"title","content"});
//这里的res是webservice返回的结果是一个object数组,saveJgzsContent是调用webservice的方法,new Object[] {"title","content"});这里是被调用webservice的方法,这里有两个参数
result = (String) res[0];
System.out.println (result);
}
catch (Exception e) {
e.printStackTrace();
// return result;
}
}
把客户端调用的地址localhost:8080改成服务器的地址就行了
public static void main(String[] args) {
String targetEndPoint = "http://135.224.78.18:8080/Indicator/services/FunctionUtils"; Service ser = new Service();
try {
Call call = (Call) ser.createCall();
call.setTargetEndpointAddress(targetEndPoint);
//获取指标信息
call.setOperation("getIndAndMeaAndDimInfoToXML");//调用的方法
String indAndMeaAndDimStr = (String) call.invoke(new Object[]{ new String("CYE6021200")});//方法中传递的参数
System.out.println("indAndMeaAndDimStr==========="+indAndMeaAndDimStr); //打印调用的方法所返回的结果
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
请问上面的
Service ser = new Service();
引的是JAVA的哪个Service包呢?
是import com.sun.xml.internal.ws.wsdl.parser.Service;
这个么?
可是如果用的是这个包, new Service()里面让写参数,写什么参数呢?
而且用这个包的话,ser.createCall();不好用的!
请指教
代码如下~
/**
* @param args
*/
public static void main(String[] args) throws ServiceException, RemoteException{
try
{
// 服务端的url,需要根据情况更改。
String endpointURL = "http://116.236.252.205/rt/Service.asmx?WSDL";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpointURL));
call.setSOAPActionURI("http://tempuri.org/" + "GetTrafficData");
call.setOperationName(new QName("Service", "GetTrafficData"));// 设置操作的名称。
// 由于需要认证,故需要设置调用的用户名和密码。
SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement("http://tempuri.org/", "complexType");
soapHeaderElement.setNamespaceURI("http://tempuri.org/");
try
{
soapHeaderElement.addChildElement("strCustomID").setValue("user");
soapHeaderElement.addChildElement("strPassword").setValue("password");
soapHeaderElement.addChildElement("strResult").setValue("实时状况");
}
catch (SOAPException e)
{
e.printStackTrace();
}
call.addHeader(soapHeaderElement);
call.setReturnType(XMLType.XSD_STRING);// 返回的数据类型
call.addParameter("op1", XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型
String ret = (String) call.invoke(new Object[] { "smg" });// 执行调用
System.out.println(ret);
}
catch (Exception e)
{
e.printStackTrace();
}
}其中
call.addParameter("", XMLType.XSD_STRING, ParameterMode.IN);// 参数的类型
String ret = (String) call.invoke(new Object[] { "" });// 执行调用
这两个引号里应该写什么参数呢?
下面的是SOAP1.2请求以下是 SOAP 1.2 请求和响应示例。所显示的占位符需替换为实际值。POST /rt/Service.asmx HTTP/1.1
Host: 116.236.252.205
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<GetTrafficData xmlns="http://tempuri.org/">
<strCustomID>string</strCustomID>
<strPassword>string</strPassword>
<strResult>string</strResult>
</GetTrafficData>
</soap12:Body>
</soap12:Envelope>
我返回的结果是:
<TrafficData CustomID=""><Result ErrorCode="-10001" Message="用户不存在" /></TrafficData>请问是上面哪里写的错误了呢?
在线等
org.apache.axis.client.Service
org.apache.axis.client.Call