之前没有接触过webService 现在需要写个webService的客户端去获取服务端的数据,然后再存入到本机的数据库中,不知道该如何实现
这个是开发的报表功能,现在报表的数据是本机自己建的表,但实际的数据要从别的几个系统中取出,再存入本机的数据库,所以想请问下实现过程是什么,谢谢
更多 0
这个是开发的报表功能,现在报表的数据是本机自己建的表,但实际的数据要从别的几个系统中取出,再存入本机的数据库,所以想请问下实现过程是什么,谢谢
更多 0
解决方案 »
- 矩阵组合排列,算法问题
- 两个类 当个类运行正常 连起来方法调用 就报异常 一个类中 有个sleep(6000) 就是线程方法
- 如何删除 TortoiseSVN 下拉列表中的url ?如图
- 关于数据库连接是否要单利的问题?
- jsp页面中object不能转化问题
- Tuscany SCA 错误
- Vfs邮件发送问题!
- 不同的.ear部署后,可以共享session值吗
- 请高手指点,比较简单的问题
- hibernate JPA传递list和array参数的问题
- 每次重启服务器都能登录应用,但是隔断时间数据库就连接超时,用的DBCP连接池,各位大哥有没有遇到过啊
- java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger
这个是服务那边提供的接口类
import java.util.List;import javax.jws.WebParam;
import javax.jws.WebService;@WebService(targetNamespace="com.yx.service")
public interface HelloWorld {
String sayHi(@WebParam(name="text")String text);
String sayHiToUser(String name);
String[] SayHiToUserList(List<String> userList);
}
下面是客户端
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;import com.yx.webservice.HelloWorld;
/**
* CXF客户端测试webservice--利用服务端接口类WebserviceTest
* @author
*
*/
public class TestCXFClient {
public static void main(String[] args) {
//方法一
/**
* 这种调用service的好处在于调用过程非常简单,就几行代码就完成一个webservice的调用,
* 但是客户端也必须依赖服务器端的接口,这种调用方式限制是很大的,
* 要求服务器端的webservice必须是java实现--这样也就失去了使用webservice的意义
*/
JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/CXFWebserver/webservice/helloWorld?wsdl");
HelloWorld service=(HelloWorld) factory.create();
System.out.println(service.sayHi("rr-cxf"));
//方法二
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
Client client = clientFactory.createClient("http://localhost:7777/myWebservice?wsdl");
Object[] result;
try {
result = client.invoke("sayHello", "rr-cxf");
System.out.println(result[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
最简单的是得到服务端的wsdl,用eclipse的web service client 生成代码,客户端就简单了
右键--new-- >other -- > web service client 把swdl 输入,就能生成客户端代码了,然后写个调用接口的方法
public static void main(String[] args) {
try {
URL url = new URL("http://localhost:7777/myWebservice?wsdl");
WebserviceTestImplService service = new WebserviceTestImplServiceLocator();
WebserviceTestImplServiceSoapBindingStub stub = new WebserviceTestImplServiceSoapBindingStub(url,service);
System.out.println(stub.sayHello("rrr-eclipse"));
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
这种方式,生成的代码太多
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;import com.yx.webservice.HelloWorld;
/**
* CXF客户端测试webservice--利用服务端接口类WebserviceTest
* @author
*
*/
public class TestCXFClient {
public static void main(String[] args) {
//方法一
/**
* 这种调用service的好处在于调用过程非常简单,就几行代码就完成一个webservice的调用,
* 但是客户端也必须依赖服务器端的接口,这种调用方式限制是很大的,
* 要求服务器端的webservice必须是java实现--这样也就失去了使用webservice的意义
*/
JaxWsProxyFactoryBean factory=new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorld.class);
factory.setAddress("http://localhost:8080/CXFWebserver/webservice/helloWorld?wsdl");
HelloWorld service=(HelloWorld) factory.create();
System.out.println(service.sayHi("rr-cxf"));
//方法二
JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();
Client client = clientFactory.createClient("http://localhost:7777/myWebservice?wsdl");
Object[] result;
try {
result = client.invoke("sayHello", "rr-cxf");
System.out.println(result[0]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
function invoke(){
if(window.ActiveXObject){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}else{
xhr = new XMLHttpRequest();
}
//指定请求地址
var url = "http://127.0.0.1:7777/hello?wsdl";
//定义请求类型和地址和异步
xhr.open("POST", url, true);
//设置Content-Type
xhr.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
//指定回调方法
xhr.onreadystatechange = back;
var textVal = document.getElementById("mytext").value;
//组装消息体的数据
var data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://server.hm.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
+'<soapenv:Body>'
+'<q0:sayHello>'
+'<arg0>'+textVal+'</arg0>'
+'</q0:sayHello>'
+'</soapenv:Body>'
+'</soapenv:Envelope>';
xhr.send(data);
}
function back(){
if(xhr.readyState == 4){
if(xhr.status == 200){
var doc = xhr.responseXML;
alert(doc);
alert(xhr.responseText);
var tag = doc.getElementsByTagName("return")[0];
alert(tag)
}
}}
2. 通过URLConnection调用//创建url地址
URL url = new URL("http://192.168.1.104:8080/hello");
//打开连接
URLConnection conn = url.openConnection();
//转换成HttpURL
HttpURLConnection httpConn = (HttpURLConnection) conn;
//打开输入输出的开关
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
//设置请求方式
httpConn.setRequestMethod("POST");
//设置请求的头信息
httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
//拼接请求消息
String data = "<soapenv:Envelope xmlns:soapenv=" +
"\"http://schemas.xmlsoap.org/soap/envelope/\" " +
"xmlns:q0=\"http://server.rl.com/\" " +
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
+"<soapenv:Body>"
+"<q0:sayHello>"
+"<arg0>renliang</arg0> "
+"</q0:sayHello>"
+"</soapenv:Body>"
+"</soapenv:Envelope>";
//获得输出流
OutputStream out = httpConn.getOutputStream();
//发送数据
out.write(data.getBytes());
//判断请求成功
if(httpConn.getResponseCode() == 200){
//获得输入流
InputStream in = httpConn.getInputStream();
//使用输入流的缓冲区
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuffer sb = new StringBuffer();
String line = null;
//读取输入流
while((line = reader.readLine()) != null){
sb.append(line);
}
//创建sax的读取器
SAXReader saxReader = new SAXReader();
//创建文档对象
Document doc = saxReader.read(new StringReader(sb.toString()));
//获得请求响应return元素
List<Element> eles = doc.selectNodes("//return");
for(Element ele : eles){
System.out.println(ele.getText());
}
function invoke(){
if(window.ActiveXObject){
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}else{
xhr = new XMLHttpRequest();
}
//指定请求地址
var url = "http://127.0.0.1:7777/hello?wsdl";
//定义请求类型和地址和异步
xhr.open("POST", url, true);
//设置Content-Type
xhr.setRequestHeader("Content-Type", "text/xml;charset=UTF-8");
//指定回调方法
xhr.onreadystatechange = back;
var textVal = document.getElementById("mytext").value;
//组装消息体的数据
var data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://server.hm.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'
+'<soapenv:Body>'
+'<q0:sayHello>'
+'<arg0>'+textVal+'</arg0>'
+'</q0:sayHello>'
+'</soapenv:Body>'
+'</soapenv:Envelope>';
xhr.send(data);
}
function back(){
if(xhr.readyState == 4){
if(xhr.status == 200){
var doc = xhr.responseXML;
alert(doc);
alert(xhr.responseText);
var tag = doc.getElementsByTagName("return")[0];
alert(tag)
}
}}
2. 通过URLConnection调用//创建url地址
URL url = new URL("http://192.168.1.104:8080/hello");
//打开连接
URLConnection conn = url.openConnection();
//转换成HttpURL
HttpURLConnection httpConn = (HttpURLConnection) conn;
//打开输入输出的开关
httpConn.setDoInput(true);
httpConn.setDoOutput(true);
//设置请求方式
httpConn.setRequestMethod("POST");
//设置请求的头信息
httpConn.setRequestProperty("Content-type", "text/xml;charset=UTF-8");
//拼接请求消息
String data = "<soapenv:Envelope xmlns:soapenv=" +
"\"http://schemas.xmlsoap.org/soap/envelope/\" " +
"xmlns:q0=\"http://server.rl.com/\" " +
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">"
+"<soapenv:Body>"
+"<q0:sayHello>"
+"<arg0>renliang</arg0> "
+"</q0:sayHello>"
+"</soapenv:Body>"
+"</soapenv:Envelope>";
//获得输出流
OutputStream out = httpConn.getOutputStream();
//发送数据
out.write(data.getBytes());
//判断请求成功
if(httpConn.getResponseCode() == 200){
//获得输入流
InputStream in = httpConn.getInputStream();
//使用输入流的缓冲区
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuffer sb = new StringBuffer();
String line = null;
//读取输入流
while((line = reader.readLine()) != null){
sb.append(line);
}
//创建sax的读取器
SAXReader saxReader = new SAXReader();
//创建文档对象
Document doc = saxReader.read(new StringReader(sb.toString()));
//获得请求响应return元素
List<Element> eles = doc.selectNodes("//return");
for(Element ele : eles){
System.out.println(ele.getText());
}
所以你只用关注客户端需要提供的参数,应该有接口说明文档的吧。2.webService客户端网上案例很多,很简单;也有自动生成客户端的插件。