XFire Web Service客户端开发
一、项目创建:
创建一个Maven的web工程
Maven包导入pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.yoki.edu</groupId>
<artifactId>WebServiceLearn</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging> <name>WebServiceLearn</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies> <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.3</version>
</dependency>
<!-- xfire webservice -->
<dependency>
<groupId>org.codehaus.xfire</groupId>
<artifactId>xfire-all</artifactId>
<version>1.2.6</version>
<exclusions>
<exclusion>
<!-- 不去除报版本冲突 -->
<artifactId>activation</artifactId>
<groupId>javax.activation</groupId>
<!--<version>1.0.2</version>-->
</exclusion>
</exclusions>
</dependency>
<!-- xfire webservice -->
</dependencies> <build>
<plugins>
<plugin>
<!-- jetty -->
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<webAppSourceDirectory>${basedir}/src/main/webapp</webAppSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
二、服务端编写:
1、创建服务端接口:HelloWorldService.java
package org.yoki.edu.service; /**
* Created by SunnyWen on 2017/9/4.
*/
public interface HelloWorldService { /**
* return welcome
*
* @param username
* @return
*/
String sayHello(String username); }
2、创建服务端接口实现:HelloWorldServiceImpl.java
package org.yoki.edu.service.impl; /**
* Created by SunnyWen on 2017/9/4.
*/
public class HelloWorldServiceImpl { public String sayHello(String name) {
return "Hello , " + name + " welcome to new world";
} }
3、web.xml文件配置:
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true"> <servlet>
<servlet-name>XFireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping> </web-app>
4、编写services.xml配置:
在classpath目录下创建META-INF/xfire/services.xml,并加入如下配置:
<beans xmlns="http://xfire.codehaus.org/config/1.0">
<service>
<!-- 服务名称 -->
<name>HelloWorldService</name>
<!-- 命名空间 -->
<namespace>http://org.yoki.edu/HelloWoldService</namespace>
<!-- 服务提供类 -->
<serviceClass>org.yoki.edu.service.HelloWorldService</serviceClass>
<!-- 服务提供实现类 -->
<implementationClass>org.yoki.edu.service.impl.HelloWorldServiceImpl</implementationClass>
</service>
</beans>

4、启动项目:
因为我们在pom.xml文件中配置了jetty,所有可以直接使用命令mvn jetty:run运行项目,如下:

或者使用mvn clean package命令打包成war,放在web容器中运行:

放入Tomcat中并运行Tomcat:

访问网站http://localhost:8080/WebServiceLearn/services/HelloWorldService?wsdl:

二、客户端编写:
package com.yunzhitx.sdy.task.utils; import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.transport.http.CommonsHttpMessageSender;
import org.springframework.stereotype.Component; import javax.xml.namespace.QName;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Observable; /**
* Created by SunnyWen on 2017/8/8.
*/
@Component
public class WsXfireClientUtil { public Sender buildSender(String url, String method, Object[] param) {
Sender sender = new Sender(url, method, param);
return sender;
} public class Sender extends Observable {
/**
* WebService 访问地址
*/
private String url;
/**
* WebService 访问方法
*/
private String method;
/**
* 需要传递的参数
*/
private Object[] param;
/**
* 设置命名空间
*/
private String targetNamespace;
/**
* 是否同步,默认为异步
*/
private Boolean isSynchro = false; public Sender(String url, String method, Object[] param) {
this.url = url;
this.method = method;
this.param = param;
} private Sender setTargetNamespace(String targetNamespace) {
this.targetNamespace = targetNamespace;
return this;
} public Sender setSynchro() {
this.isSynchro = true;
return this;
} public void send() { Runnable runnable = new Runnable() {
@Override
public void run() {
privateSend() ;
}
};
Thread thread = new Thread(runnable);
if (!isSynchro)
thread.start();
else
thread.run();
} public Object[] sendSynchro() {
return privateSend() ;
} private Object[] privateSend(){
Object[] results = null;
try {
HttpURLConnection httpConnection = (HttpURLConnection) new URL(url).openConnection();
httpConnection.setReadTimeout(240000);//设置http连接的读超时,单位是毫秒
httpConnection.connect();
Client client = new Client(httpConnection.getInputStream(), null);
client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, String.valueOf(240000));//设置发送的超时限制,单位是毫秒;
client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");
client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "true");
//Client client = new Client(new URL(wsURL));
//client.setTimeout(20000);
// 解决服务端收不到时参数值的情况 (设置的值为:targetNamespace)
if (null != targetNamespace && targetNamespace.length() > 0)
client.getService().setName(new QName(targetNamespace));
if(null == param)
param = new Object[0] ;
results = client.invoke(method, param);
// System.out.println("Web Service Xfire 发送数据成功!发送地址:" + url);
setChanged();
this.notifyObservers(results);
} catch (Exception e) {
e.printStackTrace();
}
return results ;
} } public static void main(String[] args){
WsXfireClientUtil ws = new WsXfireClientUtil() ;
ws.buildSender("http://localhost:8088/ws/countries2.wsdl" , "getCountry2" , null).send();
}
}
XFire Web Service客户端开发的更多相关文章
- SOAP: java+xfire(web service) + php客户端
作者: 吴俊杰 web service这项技术暂不说它有多落伍,但是项目中用到了,没法逃避! xml和json各有各的好处,但是JSON无疑是当今数据交互的主流了.客户soap服务器端用的是 j ...
- XFire构建web service客户端的五种方式
这里并未涉及到JSR 181 Annotations 的相关应用,具体的三种方式如下 ① 通过WSDL地址来创建动态客户端 ② 通过服务端提供的接口来创建客户端 ③ 使用Ant通过WSDL文件来生成客 ...
- XFire Web Service
Web Service 创建HelloWorldService项目 首先要启动Web Service Project 向导.该向导由三个页面组成,第一页设置Web项目配置的详细信息:第二页设置XFir ...
- .NET基础拾遗(7)Web Service的开发与应用基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- MyEclipse XFire Web Service
我们在做系统集成时,经常会需要调用webservice接口,本文将讲解在myeclipse中建立一个webservice项目,编写接口和实现类, 并且发布webservice,最后在myeclipse ...
- Web Service 之 开发、部署
一.C#开发WebService 在 VS2010 中新建 ASP.NET Web 应用程序,取名 WebTest. 应用程序下新建项其实最简单的就是建一个网站项目,直接" 添加新项→Web ...
- MyEclipse JAX-WS Web Service
在Myeclipse8.5下开发Web service程序,目前系统支持的开发框架有3个,JAX-WS,REST(JAX-RS),XFire.其中系统建议不要使用XFire 的框架,可能是要被淘汰了( ...
- MyEclipse 10 之下Web Service 的创建和实现
(一)Web service服务端开发 1. 新建一个Web service project, 菜单New -> Web Service Project, 2. 新建一个 Java Bean, ...
- 4.菜鸟教你一步一步开发 web service 之 axis 客户端创建
转自:https://blog.csdn.net/shfqbluestone/article/details/37723517 在上个教程中我们创建了一个 axis 服务端的 web service ...
随机推荐
- Docker 常用命令总结
Docker 常用命令总结 回到顶部 镜像相关 搜索 docker search *image_name* 下载 docker pull *image_name* 查看 docker images ...
- .NET泛型编程 性能提升工具 List<T>
原文发布时间为:2009-10-27 -- 来源于本人的百度文章 [由搬家工具导入] 结论 .NET 2.0中的泛型是强有力的,你写的代码不必限定于一特定类型,然而你的代码却能具有类型安全性。泛型的 ...
- Codeforces 935D Fafa and Ancient Alphabet
题目链接 题意 给定两个\(n\)位的\(m\)进制数\(s1,s2\),所有出现的\(0\)均可等概率地被其他数字替换,求\(s1\gt s2\)的概率. 思路 从高位到低位,根据每一位上相应的\( ...
- SQL Server 2005 无法连接到 127.0.0.1
[问题描述]如果连接本机的数据库服务器,服务器名称可填: 127.0.0.1或localhost或本机机器全名(比如HOME),有时候用本机机器名可以登录SQL Server 2005,但用127.0 ...
- 用cflow工具生成代码函数调用关系【转】
转自:http://www.cnblogs.com/feng-zi/p/5469652.html . 安装 sudo apt-get install cflow .使用 cflow [options. ...
- CodeForces - 103D Time to Raid Cowavans
Discription As you know, the most intelligent beings on the Earth are, of course, cows. This conclus ...
- 洛谷 P4256 公主の#19准备月考
题目背景 公主在玩完游戏后,也要月考了.(就算是公主也要月考啊QWQ) 题目描述 公主的文综太差了,全校排名1100+(全校就1100多人),她分析了好久,发现她如果把所有时间放在选择题上,得分会比较 ...
- Windows 10系统出现:“出现系统还原使用的卷影复制服务无法运行...”的问题解决
在服务中是:Volume Shadow Copy和Microsoft Software Shadow Copy Provider这两项.把它开启.
- mariadb 启动方法
通用启动方法 /etc/init.d/mariadb status #查看状态 /etc/init.d/mariadb start #启动 /etc/init.d/mariadb restart #重 ...
- 【spring boot logback】日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下/指定日志文件到达最大值后不按照配置进行切割
原本的日志文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <configuration scan ...