一、项目创建:

  创建一个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客户端开发的更多相关文章

  1. SOAP: java+xfire(web service) + php客户端

    作者: 吴俊杰 web service这项技术暂不说它有多落伍,但是项目中用到了,没法逃避!    xml和json各有各的好处,但是JSON无疑是当今数据交互的主流了.客户soap服务器端用的是 j ...

  2. XFire构建web service客户端的五种方式

    这里并未涉及到JSR 181 Annotations 的相关应用,具体的三种方式如下 ① 通过WSDL地址来创建动态客户端 ② 通过服务端提供的接口来创建客户端 ③ 使用Ant通过WSDL文件来生成客 ...

  3. XFire Web Service

    Web Service 创建HelloWorldService项目 首先要启动Web Service Project 向导.该向导由三个页面组成,第一页设置Web项目配置的详细信息:第二页设置XFir ...

  4. .NET基础拾遗(7)Web Service的开发与应用基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  5. MyEclipse XFire Web Service

    我们在做系统集成时,经常会需要调用webservice接口,本文将讲解在myeclipse中建立一个webservice项目,编写接口和实现类, 并且发布webservice,最后在myeclipse ...

  6. Web Service 之 开发、部署

    一.C#开发WebService 在 VS2010 中新建 ASP.NET Web 应用程序,取名 WebTest. 应用程序下新建项其实最简单的就是建一个网站项目,直接" 添加新项→Web ...

  7. MyEclipse JAX-WS Web Service

    在Myeclipse8.5下开发Web service程序,目前系统支持的开发框架有3个,JAX-WS,REST(JAX-RS),XFire.其中系统建议不要使用XFire 的框架,可能是要被淘汰了( ...

  8. MyEclipse 10 之下Web Service 的创建和实现

    (一)Web service服务端开发 1. 新建一个Web service project, 菜单New -> Web Service Project, 2. 新建一个 Java Bean, ...

  9. 4.菜鸟教你一步一步开发 web service 之 axis 客户端创建

    转自:https://blog.csdn.net/shfqbluestone/article/details/37723517 在上个教程中我们创建了一个 axis 服务端的 web service ...

随机推荐

  1. hihocoder #1407 : 后缀数组二·重复旋律2

    #1407 : 后缀数组二·重复旋律2 Time Limit:5000ms Case Time Limit:1000ms Memory Limit:256MB 描述 小Hi平时的一大兴趣爱好就是演奏钢 ...

  2. Struts2的使用注解配置Action(零配置)

    1.首先引入struts2注解的jar包:struts2-convention-plugin.jar ------------------------------第一种方式-------------- ...

  3. Codeforces Round #442 Div.2 A B C D E

    A. Alex and broken contest 题意 判断一个字符串内出现五个给定的子串多少次. Code #include <bits/stdc++.h> char s[110]; ...

  4. android基本控件学习-----ScrollView

    ScrollView(滚动条)的讲解: 一.对于ScrollView滚动条还是很好理解的,共有两种水平和垂直,ScrollView和HorizontalScrollview,这个里面不知道该总结写什么 ...

  5. android的布局-----FrameLayout(帧布局)

    (-)帧布局简介 帧布局容器为每个加入的其中的组件创建一个空白的区域称为一帧每个子组件占据一帧,这些帧都会根据gravity的属性执行自动对齐 (二)属性 foreground:这是帧布局的前景图像 ...

  6. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---33

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  7. iscsi 学习

    iscsi-initiator-utils-6.2.0.872-10.el6.x86_64 iscsi-initiator-utils-6.2.0.873-32.el7.x86_64 在el7中, i ...

  8. 【转载】Outlook2010 移动数据文件到其它地方

            您可以将数据文件移到计算机的其他文件夹中.移动文件的一个原因在于可使备份更容易并且可以让默认的outlook邮件文件不在存在C盘,导致装系统不见或者文件过大而撑死了C盘.例如,如果数据 ...

  9. 爬虫学习笔记(六)PyQuery模块

    PyQuery模块也是一个解析html的一个模块,它和Beautiful Soup用起来差不多,它是jquery实现的,和jquery语法差不多,会用jquery的人用起来就比较方便了. Pyquer ...

  10. Android无需权限显示悬浮窗, 兼谈逆向分析app

    前言 最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android. ...