`
LC2586
  • 浏览: 25142 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EJB3.0学习总结(二)--EJB3.0容器模型的WEB服务

阅读更多

JAX-WS

  JAX-WS规范是一组XML web services的JAVA API。JAX-WS允许开发者可以选择RPC-oriented或者message-oriented 来实现自己的web services。
  在 JAX-WS中,一个远程调用可以转换为一个基于XML的协议例如SOAP。在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码。JAX-WS的运行时实现会将这些API的调用转换成为对于SOAP消息。
  在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI (service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。
  在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。
  通过web service所提供的互操作环境,我们可以用JAX-WS轻松实现JAVA平台与其他编程环境(.net等)的互操作。
  JAX-WS与JAX-RPC之间的关系
  Sun最开始的web services的实现是JAX-RPC 1.1 (JSR 101)。这个实现是基于Java的RPC,并不完全支持schema规范,同时没有对Binding和Parsing定义标准的实现。
  JAX-WS2.0 (JSR 224)是Sun新的web services协议栈,是一个完全基于标准的实现。在binding层,使用的是the Java Architecture for XML Binding (JAXB, JSR 222),在parsing层,使用的是the Streaming API for XML (StAX, JSR 173),同时它还完全支持schema规范。

 

 

目的:使用ejb3 的 @WebService  注解开发一个webservice服务端,然后使用JAX-WS 技术完成客户端代码的生成和调用

 

webservice 服务器端的开发:

 

 

 

 

 

  步骤1: 写一个webservice 需要传输的对象

 

package cn.itcast.bean;

import java.io.Serializable;

public class Order implements Serializable{
	private static final long serialVersionUID = -5898452101455689209L;
	
	private String id;
	private String name;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

 

  

步骤2: 定义webservice服务器端需要暴漏的方法接口

 

package cn.itcast.service;

import java.util.List;

import cn.itcast.bean.Order;

public interface OrderService {
	public String getUserName(String name);
	public Order getOrder(String orderid);
	public List<Order> getOrders();
}

 

 

 

  步骤3: 定义暴漏方法的实现

 

 

package cn.itcast.service.impl;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.jws.WebService;

import cn.itcast.bean.Order;
import cn.itcast.service.OrderService;


/*使用这个注解,就可以这个会话bean中的方法暴漏成webservice方法  
 * 如果你只想暴漏其中的某些方法,你可以再想对外暴漏的方法上  
 * 加上@WebMethod 注解,那么没有这个注解的方法就不会暴漏  
 * 成webservice方法了   
 * targetNamespace 命名空间 也就是wsdl中的 targetNamespace  
 * name 端点接口的名称 也就是wsdl中的portType name  
 * serviceName 服务的名称  
 * 不修改上面的3个属性也没关系,就是你发布的wsdl的可读性差  
 * */ 
@WebService(targetNamespace="http://ws.itcast.cn",name="OrderService",
		serviceName="OrderServiceBean")
@Stateless
@Remote(OrderService.class)
public class OrderServiceBean implements OrderService {

	public Order getOrder(String orderid) {
		Order order = new Order();
		order.setId(orderid);
		order.setName("小鸭子");
		return order;
	}

	public List<Order> getOrders() {
		List<Order> orders = new ArrayList<Order>();
		
		Order order1 = new Order();
		order1.setId("001");
		order1.setName("小一");
		
		Order order2 = new Order();
		order2.setId("002");
		order2.setName("小二");
		
		orders.add(order1);
		orders.add(order2);
		return orders;
	}

	public String getUserName(String name) {
		return name;
	}

}

 

 

 

 步骤4: ant 打包(build.xml,项目根目录下) 

 

<?xml version="1.0" encoding="UTF-8"?>
<!--.表示同一目录 ..表示在上一目录-->

<project name="WebService" basedir=".">  
   <property name="src.dir" value="${basedir}\src"/>
   <property environment="env"/>
   <property name="jboss.home" value="${env.JBOSS_HOME}"/>
   <property name="jboss.server.config" value="default"/>
   <property name="build.dir" value="${basedir}\build"/>
    
    <path id="build.classpath">
        <fileset dir="${jboss.home}\client">
            <include name="*.jar"/>
         </fileset>
    	<pathelement location="${build.dir}"/>
    </path>


    <target name="prepare" >
       <delete dir="${build.dir}"/>
       <mkdir dir="${build.dir}"/>
    </target>


    <target name="compile" depends="prepare" description="编译">
    <javac srcdir="${src.dir}" destdir="${build.dir}">
       <classpath refid="build.classpath"/>
    </javac>
    </target>
  

    <target name="ejbjar" depends="compile" description="创建ejb发布包">
       <jar jarfile="${basedir}\${ant.project.name}.jar">
           <fileset dir="${build.dir}">
            <include name="**/*.class"/>
            </fileset>

        <!--把persistence.xml打包到META-INF目录下-->

       	<!--<metainf dir="${src.dir}\META-INF"></metainf>-->
       </jar>
    </target>

    <target name="deploy" depends="ejbjar" description="ejb发布">
       <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/>
    </target>
                                                                                                                                                                               
    <target name="undeploy" description="卸载ejb">
       <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/>
    </target>
</project>

 

 

 

 

步骤5:验证输入 http://localhost:8080/jbossws/   找到 View a list of deployed services  点击可以看到你发的webservice的wsdl文件

 

webservice 客户端的开发:

 

 

步骤1: 建立一个空的项目,从 https://jax-ws.dev.java.net/2.1.7/ 下载 jax-ws,使用  java -jar JAXWS2.1.7-20090419.jar,解压缩后会有lib ,讲lib下的 jar包加到classpath下 

 

步骤2:使用ant 从服务器的wsdl 生成本地调用框架

 

 

<?xml version="1.0" encoding="UTF-8"?>
<project name = "WSClient"  default="wsclient" basedir =".">  
<property name = "src.dir" value = "${basedir}/src"/>  
<path id="build.classpath" description="设置类路径">  
  <fileset dir="${basedir}/lib">  
   <include name="*.jar"></include>  
  </fileset>  
 </path>  
  
<target name = "wsclient" description ="生成webservice客户端代码">  
    <taskdef name = "wsimport" classname ="com.sun.tools.ws.ant.WsImport" classpathref="build.classpath"/>  
    <wsimport wsdl="http://127.0.0.1:8080/WebService/OrderServiceBean?wsdl"  
    sourcedestdir="${src.dir}" package="cn.com.xinli.ws.client" keep="true"  
    verbose ="true" destdir="${basedir}/bin"/>  
    </target>    
</project> 

 

 

 

 

步骤3:使用junit4 写单元测试

 

 

package junit.test;


import java.util.List;

import org.junit.BeforeClass;
import org.junit.Test;

import cn.com.xinli.ws.client.Order;
import cn.com.xinli.ws.client.OrderService;
import cn.com.xinli.ws.client.OrderServiceBean;

public class WSTest {
	private static OrderService orderService;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		OrderServiceBean orderServiceBean = new OrderServiceBean();
		orderService =orderServiceBean.getOrderServicePort();
	}

	@Test
	public void getUserName(){
		System.out.println(orderService.getUserName("小明"));
	}
	
	@Test
	public void getOrder(){
		Order order = orderService.getOrder("999");
		System.out.println(order.getId());
		System.out.println(order.getName());
	}
	
	@Test
	public void getOrders(){
		List<Order> orders = orderService.getOrders();
		for(Order order : orders)
			System.out.println(order.getId()+","+order.getName());
	}
}

  

 

 

验证: 保证服务器的wsdl 能正确访问,调用单元测试就好了。

 

 

 

分享到:
评论

相关推荐

    ejb3.0培训教程与源码(绝对精品)

    ejb3.0培训教程与源码(绝对精品) .................... 1, 服务器端的一个组件模型,能部署在多层环境中; EJB API, javax.ejb.*; 2, EJB容器可以为我们提供中间件服务; 3, EJB客户端:(常见的) 1) 独立的java程序...

    EJB3.0容器模型的WEB服务-WebService

    NULL 博文链接:https://1028826685.iteye.com/blog/1503446

    JSF1.2+EJB3.0实现的一个项目实例

    第二种是要部署在单独的Web容器Tomcat中,在独立的Tomcat中调用JBoss服务器中jsfejb3-ejb所提供的服务。此时还需要在web端的类路径中(也就是在jsfejb3-war项目的lib文件夹中)添加以下几个Jar包(这些包都在JBoss...

    传智播客 EJB3.0PPT 完整版 黎明活

    本资源为PPT,配套视频为: 01_下载安装与运行jboss ... 12_开发EJB容器模型的WEB服务 附录01_EJB3基本概念及发展前景 附录02_EJB3.0推荐教程 附录03_EJB3的运行环境 如果需要配套视频,请给本人私信。

    EJB3.0实录教程+配套源码

    ejb3.0培训教程与源码 #######含真正配套源码 .................... 1, 服务器端的一个组件模型,能部署在多层环境中; EJB API, javax.ejb.*; 2, EJB容器可以为我们提供中间件服务; 3, EJB客户端:(常见的) 1) ...

    J2EE应用开发详解

    208 11.7.1 基于容器管理事务 209 11.7.2 基于Bean管理的事务 210 11.8 EJB拦截器 212 11.9 EJB定时服务 214 11.10 EJB安全管理 214 11.11 小结 216 第12章 RMI 217 12.1 RMI简介 217 12.1.1 RMI的架构 218 12.1.2 ...

    Java数据编程指南

    网络客户机上的数据显示 第12章 Web体系结构 引言 典型的Web中心体系结构 应用程序体系结构 Web中心应用程序的判定标准 小结 第13章 服务程序(Servlets) 概述 服务程序的结构 服务...

    avaliacao-s2it

    为此,必须使用用Java编写的服务器,它不是EJB容器,但用作servlet容器,称为 d 3-在Web服务器上运行的组件只有几种类型: C 4-分析有关JEE和EJB的以下各项。 这 5-Spring Framework是一个完整的Java平台,为Java...

    Spring攻略(第二版 中文高清版).part2

    7.2 用不同状态类型建立Web流程模型 246 7.2.1 问题 246 7.2.2 解决方案 246 7.2.3 工作原理 246 7.3 加强Web流程安全 257 7.3.1 问题 257 7.3.2 解决方案 258 7.3.3 工作原理 258 7.4 持续存储Web...

    Spring攻略(第二版 中文高清版).part1

    7.2 用不同状态类型建立Web流程模型 246 7.2.1 问题 246 7.2.2 解决方案 246 7.2.3 工作原理 246 7.3 加强Web流程安全 257 7.3.1 问题 257 7.3.2 解决方案 258 7.3.3 工作原理 258 7.4 持续存储Web...

Global site tag (gtag.js) - Google Analytics