Web Services是由企业公布的完毕其特定商务需求的在线应用服务,其它公司或应用软件可以通过Internet来訪问并使用这项在线服务。

Web Service的关键技术和规则:

1.XML:描写叙述数据的标准方法.

2.SOAP:表示信息交换的协议(简单对象訪问协议).

3.WSDL:Web服务描写叙述语言.

4.UDDI:通用描写叙述、发现与集成,他是一种独立于平台,基于XML语言的用于在互联网上描写叙述商务的协议。

一、利用JDK web服务api实现,这里使用基于SOAP message的Web Service:

1.首先创建一个Web Services项目,作为Web services Endpoint.

2.创建一个HelloService.java类

package com.yjpeng.hello;

import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.xml.ws.Endpoint;

@WebService
public class HelloService {

@WebMethod
public String sayHello(String message){
return "Hello ," + message;
}

public static void main(String[] args) {
//create and publish an endPoint
HelloService hello = new HelloService();
Endpoint endPoint = Endpoint.publish("http://localhost:8080/helloService", hello);
}
}

3.使用apt编译HelloService.java(比如: apt -d bin(bin存放编译后的文件文件夹) scr/com/yjpeng/hello/HelloService.java)后,会生成jaxws文件夹。

4.使用java com.yjpeng.hello.HelloService运行HelloService.java文件,在浏览器中输入http://localhost:8080/helloService?wsdl出现例如以下图

5.使用wsimport命令生成client:wsimport -p com.yjpeng.webservice -keep http://localhost:8080/helloService?wsdl 这时会在当前文件夹中生成例如以下文件:

6.编写好client文件HelloClient.java

package com.yjpeng.hello;

import com.yjpeng.webservice.HelloServiceService;

public class HelloClient {
public static void main(String[] args) {
HelloServiceService helloServiceService = new HelloServiceService();
com.yjpeng.webservice.HelloService helloService = helloServiceService.getHelloServicePort();
System.out.println(helloService.sayHello("你好"));
}

}

执行结果在控制台输出 hello,你好  证明利用JDK web服务API实现web service成功!

二、使用xfire框架,我这里使用的是MyEclipse集成的xfire进行測试,利用xfire开发WebService能够有三种方法:

a.一种是从JavaBean中生成。

b.一种是从wsdl文件里生成。

c.一种是自己建立webservice。

详细实现过程例如以下:

1.用Myeclipse建立webServiceproject(注意:Web Service&J2EE Details中的Framework选XFire),文件夹结构例如以下:

2.创建IHello.java接口

package com.yjpeng.hello;

public interface IHello {
public String sayHello(String message);
}

3.创建IHelloImpl.java实现IHello.java接口

package com.yjpeng.hello;

public class IHelloImpl implements IHello {

public String sayHello(String message) {
return message;
}
}

4.改动Service.xml文件,增加下面代码

<service>
 <!-- 为该Service起一个名字 -->
  <name>HelloService</name>
  <!-- service的接口类 -->
  <serviceClass>
  com.yjpeng.hello.IHello
  </serviceClass>
  <!-- service的接口实现类-->
  <implementationClass>
  com.yjpeng.hello.IHelloImpl
  </implementationClass>
  <!-- wsdl的样式-->
  <style>wrapped</style>
  <use>literal</use>
  <scope>application</scope>
 </service>

5.把该Web Service项目部署到tomcat里面启动tomcat在浏览器地址栏输入http://localhost:8080/TestWebServices/services/Hello?wsdl 出现例如以下图

6.然后在展开HelloService后面的wsdl能够看到

7.创建一个clientHelloClient.java类

import java.net.MalformedURLException;
import java.net.URL;

import org.codehaus.xfire.XFireFactory;
import org.codehaus.xfire.client.Client;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;

import com.yjpeng.hello.IHello;

public class HelloClient {
public static void main(String[] args) {
Service s = new ObjectServiceFactory().create(IHello.class);
XFireProxyFactory xf = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
String url="http://192.168.122.128:8080/TestWebServices/services/HelloService";
IHello hello;
try {
hello = (IHello)xf.create(s, url);
System.out.println(hello.sayHello("你好"));
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
//这个是在java端调用.net写的远程Web Service 假设调用本机写的仅仅须要把URL中的地址换成本机能訪问的地址就可以
Client c = new Client(new URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl"));
Object[] o = c.invoke("qqCheckOnline", new String[]{"271751507"});
System.out.println(o.length);
} catch (Exception e) {
e.printStackTrace();
}
}
}

执行HelloClient.java类能够输出 你好            1.

三、使用axis1.4开发webservice方法

首先下载axis1.4包和tomcatserver,并将解压后的axis1.4包以下的webapps下的axis文件夹拷贝到tomcatserver的webapps文件夹中。axis支持三种Web Service的部署和开发,分别为:

a.Dynamic Invocation Interface(DII)

b.Stubs 方式

c.Dynamic Proxy方式

1.编写DII(Dynamic Invocation Interface)方式Web Service

a.编写服务程序HelloClient.java

public class HelloClient
{
public String getName(String name){
return "hello," + name;
}
}

b.将HelloClient.java文件复制到axis_home下,重命名为HelloClient.jws.

c.訪问链接http://localhost:8080/axis/HelloClient.jws?wsdl页面显示axis自己主动生成的wsdl文件

d.编写訪问服务的clientTestHelloClient.java须要导入对应的axis.jar包,在下载的axis的WEB-INF/lib/文件夹下。

package com.yjpeng.webservice;

import java.net.URL;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class TestHelloClient {
public static void main(String[] args){
try{
String endpoint = "http://localhost:8080/axis/HelloClient.jws";
Service service = new Service();
Call call = (Call)service.createCall();
call.setOperationName(new QName(endpoint, "getName"));
call.setTargetEndpointAddress(new URL(endpoint));
String result = (String) call.invoke(new Object[]{"张三"});
System.out.println(result);
}catch (Exception e) {
e.printStackTrace();
}
}
}

执行TestHelloClient.java在控制台输出hell,张三,測试成功.

2.编写Dynamci Proxy方式訪问服务

a.编写部署服务端程序,用上边DII方式使用的HelloClient.java

public class HelloClient
{
public String getName(String name){
return "hello," + name;
}
}

b.编写代理接口HelloClientInterface.java须要扩展java.rmi.Remote类

package com.yjpeng.dynamic.proxy;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface HelloClientInterface extends Remote {
public String getName(String name) throws RemoteException;
}

c.编写訪问服务的clientTestHelloClient.java

package com.yjpeng.dynamic.proxy;

import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;

public class TestHelloClient {
public static void main(String[] args){
try{
String wsdlUrl = "http://localhost:8080/axis/HelloClient.jws?wsdl";
String nameSpaceUrl = "http://localhost:8080/axis/HelloClient.jws";
String serviceName = "HelloClientService";
String portName = "HelloClient";
ServiceFactory serviceFactory = ServiceFactory.newInstance();
Service afService = serviceFactory.createService(new URL(wsdlUrl), new QName(nameSpaceUrl, serviceName));
HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUrl, portName),
HelloClientInterface.class);
System.out.println(proxy.getName("张三"));
}catch (Exception e) {
e.printStackTrace();
}
}
}

执行TestHelloClient.java在控制台输出hell,张三,測试成功.

四、使用axis2开发webservice

研究中....

五、在java web项目中开放一个webservice接口实例

1.引入须要的jar包

2.创建一个接口类IAddNumbers.java

package com.yjpeng.webservice;

public interface IAddNumbers {
public int addNumbers(int a, int b);
}

3.创建一个AddNumberImpl.java实现IAddnumbers.java接口类

package com.yjpeng.webservice;

import javax.jws.WebService;

import com.sun.xml.ws.transport.http.servlet.WSServlet;

@WebService(targetNamespace="http://webservice.yjpeng.com", serviceName="AddNumberImplService",
portName="AddNumberImpl")
public class AddNumberImpl implements IAddNumbers {
public int addNumbers(int a, int b) {
return a + b;
}
}

4.在WEN-INF文件夹下创建一个sun-jaxws.xml文件

<?xml version="1.0"?>
<endpoints version="2.0"
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
<endpoint name="AddNumberImpl"
implementation="com.yjpeng.webservice.AddNumberImpl"
url-pattern="/addNumberImpl"/>
</endpoints>

5.在web.xml文件里添加

<servlet>
<servlet-name>AddNumberService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AddNumberService</servlet-name>
<url-pattern>/addNumberImpl</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>

6.部署web项目 启动对应部署server。訪问http://localhost:8080/TestJaxWebService/addNumberImpl?wsdl 这样每次启动webserver就开放了一个web service的接口。

Java中WebService实例的更多相关文章

  1. java面试一日一题:java中一个对象实例的结构是什么样子的

    问题:请讲下在java程序运行时一个对象实例的数据结构是什么样子的 分析:该问题主要考察对java中对象的理解,在程序运行过程中一个对象实例是以什么样的形式存在的 回答要点: 主要从以下几点去考虑, ...

  2. Java开发WebService实例(1)

    参考文献:http://blog.sina.com.cn/s/blog_7bd0d6a70101dixc.html 简单的java工程实现 1 首先建立一个Java工程,在里面建一个Web servi ...

  3. java中参数传递实例

    //在函数中传递基本数据类型,            2. public class Test {         4.     public static void change(int i, in ...

  4. Java中Webservice调用.NET天气接口生成客户端异常

    学习webservice时候有个例子调用公网的天气预报接口实现查询天气的功能.然而在使用命令编译客户端代码的时候出错了.大概看了一下网上说是需要将将文件中所有出现的 < s:element re ...

  5. 利用Java编写简单的WebService实例

    使用Axis编写WebService比較简单,就我的理解,WebService的实现代码和编写Java代码事实上没有什么差别,主要是将哪些Java类公布为WebService. 以下是一个从编写測试样 ...

  6. 利用Java编写简单的WebService实例-转载

    使用Axis编写WebService比较简单,就我的理解,WebService的实现代码和编写Java代码其实没有什么区别,主要是将哪些Java类发布为WebService.下面是一个从编写测试例子到 ...

  7. SAP和Java系统的Webservice实例

    简介: 关于Webservice的概念和原理,简单来讲,Webservice是一种基于SOAP传输协议,用WSDL描述,用XML封装数据的接口技术.由于其跨平台.跨防火墙.开发成本低.开发周期短等优势 ...

  8. Java 使用Axis实现WebService实例

    在上一篇WebService实例中,基于jdk1.6以上的javax.jws 发布webservice接口.这篇博文则主要用eclipse/myeclipse 使用axis插件进行发布和调用WebSe ...

  9. java中注解的使用与实例 (二)

    java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...

随机推荐

  1. __autoload()方法

    php中__autoload()方法详解 PHP在魔术函数__autoload()方法出现以前,如果你要在一个程序文件中实例化100个对象,那么你必须用include或者require包含进来100个 ...

  2. 用python -i写交互式shell

    cabinet是公司的一个数据存储服务,需要添加一个shell client,查看数据,做简单操作. 用python写了一个比想象的简单.代码如下: #! /usr/bin/python -i # c ...

  3. 怎样学习HTML5?

    怎样学习HTML5?这个话题,问的人非常多,随便百度一下就能看到各种各样的回答.只是感觉每种回答都不给力.以下我给出一个自己理解的HTML5学习的路线图,依照这个路线图学习以后,一般的HTML5项目开 ...

  4. Ansi,UTF8,Unicode,ASCII编码的差别

    近日须要不同的编码,关于上述编码,一直迷迷糊糊,查了些资料,总算大致了解了,以下全是从网上搜来的: 1.  ASCII和Ansi编码    字符内码(charcter code)指的是用来代表字符的内 ...

  5. Java byte数据类型详解

    public static String bytes2HexString(byte[] b) { String ret = ""; for (int i = 0; i < b ...

  6. uva 10127 - Ones(数论)

    题目链接:uva 10127 - Ones 题目大意:给出n,问说者少要多少为1才干够整除n. 解题思路:等于是高精度取模,直到余数为0为止. #include <cstdio> #inc ...

  7. 认识axure部件库中各个部件的属性

    在axure中每一个部件都有自己的属性,下面这个表格,我们就首先来了解认识一下!以下内容来自网站蓝图,版权归原作者所有! 属性名称 属性说明 属性举例 标签 用来标示部件的名称,在axure中,部件名 ...

  8. C++学习笔记14,private/protected/public继承,私有继承,保护继承,公有继承(五)(总结)

    各种继承方式: 特征 公有继承 保护继承 私有继承 公有成员变为 派生类的公有成员 派生类的保护成员 派生类的私有成员 保护成员变为 派生类的保护成员 派生类的保护成员 派生类的私有成员 私有成员变为 ...

  9. 面试经典-设计包含min函数的栈

    问题:设计包含min函数的栈(栈) 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素. 要求函数min.push以及pop的时间复杂度都是O(1). 解答:push 和pop的时间复杂度 ...

  10. Appium TestNg Maven Android Eclipse java简单启动实例

    环境准备 Eclipse + maven + appium + TestNg 确保已经在Eclipse 上面安装maven TestNg的插件 打开Eclipse,新建一个java项目,把项目转换成m ...