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. GreenDAO数据库版本升级

    GreenDAO是一款非要流行的android平台上的数据库框架,性能优秀,代码简洁. 初始化数据库模型代码的时候需要使用java项目生成代码,依赖的jar包已经上传到我的资源里了,下载地址如下:ht ...

  2. myeclispe启动后报错 Subclipse talks to Subversion via a Java API that requires access to native libraries.

    myeclispe 中SVN插件常遇到的异常: Subclipse talks to Subversion via a Java API that requires access to native ...

  3. Swift - 通过url地址打开web页面

    通过UIApplication.sharedApplication().openURL()方法,可以使用浏览器打开相应的网页. 1 2 3 var urlString = "http://h ...

  4. webdynpro 调用应用程序做跳转

    1.是调用指的是调用生成应用程序,非webdynpro组件程序, 如下: 1)调用页面,并传值 METHOD get_zgmtpage . DATA:lw_application_name TYPE ...

  5. 国际化之MessageFormat与占位符

    如果一个字符串文本中包含了多个与国际化相关的数据,可以使用MessageFormat类对这些数据进行批量处理. 例如: 在2016年1月9日的时候,一场台风导致了500间房屋的摧毁和¥1000000元 ...

  6. 解决Java compiler level does not match the version of the installed Java project facet.问题

    其实之前遇到过Java compiler level does not match the version of the installed Java project facet.这个问题,因为当时没 ...

  7. Custom draw 和 Owner draw 的区别

    "Custom Draw" is a feature shared by all of Microsoft's common controls, which allows you ...

  8. 14.8.1 Enabling File Formats

    14.8 InnoDB File-Format Management 14.8.1 Enabling File Formats 14.8.2 Verifying File Format Compati ...

  9. Get RSA public key ASN.1 encode from a certificate in DER format

    RSA public key ASN.1 encode is defined in PKCS#1 as follows: RSAPublicKey :: = SEQUENCE  {     modul ...

  10. 单片机C语言实现的采用DS18B20的温度检测装置

    这几天老师布置了一个课程设计题目:采用51单片机控制的DS18B20温度检测系统.大概花了我一个礼拜的时间,幸好我的C语言学得还可以,最后还是让我搞出来了,真是高兴,我是采用STC-52单片机和DS1 ...