开发EJB容器模型的WEB服务

WEB服务

Web服务也是一种分布式技术,它与EJB最大的不同是,Web服务属于行业规范,可以跨平台及语言。而EJB属于Java平台的规范,尽管理论上可以跨平台,但实现起来比较复杂,所以其应用范围局限在了Java平台。它们两者的偏重点不一样,Web服务偏重的是这个系统对外提供什么功能,而EJB偏重的是如何使用一个个组件组装这些功能。就好比一个硬盘,它对外提供的是存储服务,这是Web服务的关注点,对于怎样组装这个硬盘,怎样构造这些小零件,Web服务并不关心,但这些却是EJB所关注的。

JavaEE为web service提供了两种不同的编程模型:EJB容器模型及Web容器模型,这里使用JAX-WS2.x规范(Java API for XML-based Web Services)介绍Web Service的开发。

步骤:

1.新建一个Web Service项目,新建JavaProject:WebService,导入EJBjar文件。

2.建立一个无状态会话Bean,发布到WebService。

新建接口OrderService在cn.hqu.service下,定义三个方法:

public interface OrderService {

public abstract StringgetUseName(String name);

public abstract OrdergetOrder(String orderId);

public abstract List<Order>getOrders();

}

新建JavaBean:类Order在cn.hqu.bean下,有字段orderId、name。和getter、setter。

新建类OrderServiceBean实现接口OrderService在cn.hqu.service.impl:

package cn.hqu.service.impl;import java.util.ArrayList;
import java.util.List;import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.jws.WebService;import cn.hqu.bean.Order;
import cn.hqu.service.OrderService;
@Stateless
@Remote(OrderService.class)
public class OrderServiceBean implements OrderService {@Overridepublic String getUseName(String name) {return name;}@Overridepublic Order getOrder(String orderId) {Order order = new Order();order.setOrderId(orderId);order.setName("苏志达");return order;}@Overridepublic List<Order> getOrders() {List<Order> persons = new ArrayList<Order>();Order order1 = new Order();order1.setOrderId("1");order1.setName("小苏1");Order order2 = new Order();order1.setOrderId("2");order1.setName("小苏2");persons.add(order1);persons.add(order2);return persons;}}

在类上加@WebService,把这里面的所以方法变成 WebService方法。

也可以标注需要暴露的方法,在方法上面加@WebMethod,其他没标注的就是不暴露为WebService方法的。

打包发布,使用Ant,拷贝一份ant,修改配置name为项目名。

执行deploy,将WebService发布到Jboss中。查看控制台发布成功。

进入Jboss的后台管理可以查看我们发布的WebService服务

http://localhost:8080/jbossws/  点击View a list ofdeployed services。

可以点击http://127.0.0.1:8080/WebService/OrderServiceBean?wsdl查看WebService的描述语言,可以通过WebService注解@Webservice的属性进行修改。

@WebService(targetNamespace="http://ws.hqu.cn",name="OrderService",

serviceName="OrderServiceBean")

发布deploy。

Web服务开发完成,接下来开发Web服务的客户端。

开发步骤如下:

1.      在应用的类路径下放入JAX-WS的jar文件拷贝到lib下(下载路径:https://jax-ws.dev.java.net) 。

2.      利用Web Service客户端生成工具生成辅助类。

3.      第三步:借助辅助类调用WebService。

创建一个客户端应用,新建Javaproject:WSClient,导入EJBJar。新建lib文件夹。

我们使用wsimport工具的Ant任务类生成辅助类

新建Ant配置文件:在项目根目录下新建build.xml

<?xml version="1.0" encoding="UTF-8"?>

<project name="WSClient" default="wsclientgen" basedir=".">

<property name="src.dir" value="${basedir}/src" />

<path id="build.classpath" description="设置类路径">

<fileset dir="${basedir}/lib">

<include name="*.jar"/>

</fileset>

</path>

<target name="wsclientgen" 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.hqu.ws.client" keep="true"

verbose="true" destdir="${basedir}/bin"/>

</target>

</project>

执行Ant生成客户端调用的辅助代码

刷新客户端项目,可以看到生成的代码。

通过这些代码去调用Web服务,

新建一个单元测试调用Web服务:

public classWSTEst {

@Test

public void getUserName(){

OrderServiceBeanservice = newOrderServiceBean();

OrderServiceorderService = service.getOrderServicePort();

System.out.println(orderService.getUseName("小明"));

}

}

控制台输出小明 证明方法是调用成功的。

报错:javax.xml.ws.WebServiceException: No Content-type in the header!

原因及解决办法:

把JBoss4.2内的JBOSS_HOME/client目录下的一下文件复制到JBoss5.1内的JBOSS_HOME/lib/endorsed目录下,重启服务就可以了。

jboss-jaxrpc.jar

jboss-jaxws.jar

jboss-jaxws-ext.jar

jboss-saaj.jar

package juint.test;import java.util.List;import org.junit.Test;import cn.hqu.ws.client.Order;
import cn.hqu.ws.client.OrderService;
import cn.hqu.ws.client.OrderServiceBean;public class WSTEst {@Testpublic void getUserName(){OrderServiceBean service = new OrderServiceBean();OrderService orderService = service.getOrderServicePort();System.out.println(orderService.getUseName("小明"));}@Testpublic void getOrder(){OrderServiceBean service = new OrderServiceBean();OrderService orderService = service.getOrderServicePort();Order order =orderService.getOrder("111");System.out.println(order.getOrderId()+","+order.getName());}@Testpublic void getOrders(){OrderServiceBean service = new OrderServiceBean();OrderService orderService = service.getOrderServicePort();List<Order> orders =orderService.getOrders();for (Order order : orders) {System.out.println(order.getOrderId()+","+order.getName());}}
}

开发web服务的时候,返回list的时候,应该采用泛型的形式来定义,EJB容器内部才能对它进行解释,并把它翻译生成对应的xml里面的类型s

(http://127.0.0.1:8080/WebService/OrderServiceBean?wsdl)。

代码:http://pan.baidu.com/s/1i39S4sP

EJB_开发EJB容器模型的WEB服务相关推荐

  1. [转载]SUN ONE 开发 WEB 服务

    SUN ONE 开发 WEB 服务 实施摘要 本文对在北美的一家最大能源公司TransCanada PipeLines Limited的原型Web服务实现做了高层次的技术回顾.TransCanada的 ...

  2. WSE3.0构建Web服务安全(3):WSE3.0策略配置、证书、签名、与实例开发

    继WSE3.0构建Web服务安全(1):WSE3.0安全机制与实例开发和WSE3.0构建Web服务安全(2):非对称加密.公钥.密钥.证书.签名的区别和联系以及X.509 证书的获得和管理之后,今天我 ...

  3. docker网络问题解决办法“大全”:宿主机访问不了docker容器中web服务,容器内访问不了外网的问题的解决办法...

    ubuntu kylin 15 安装docker后 ,启动包含web应用的容器,在宿主机上死活访问不了web服务.后来发现进入容器后,安装不了软件,访问不了外网.因此网上查原因,有大神说让重建dock ...

  4. EJB是什么Java使用EJB容器的详细概述

    EJB是什么 博客分类: java EJB  最近项目中接触到EJB,但对EJB不是很了解,于是网上找了些资料参考,下面这篇是个人感觉讲的比较清晰的,遂转载一起参考,文章转自https://www.c ...

  5. 一文讲透推荐系统提供web服务的2种方式

    作者丨gongyouliu 编辑丨zandy 来源 | 大数据与人工智能(ID: ai-big-data) 推荐系统是一种信息过滤技术,通过从用户行为中挖掘用户兴趣偏好,为用户提供个性化的信息,减少用 ...

  6. 使用模板将Web服务的结果转换为标记语言

    \ 核心要点 \ HTTP-RPC是一个开源的框架,用来在Java中构建REST服务: \ 同一个代码库,可以服务于Web.移动和桌面客户端: \ 默认提供了JSON响应数据: \ 通过使用模板,支持 ...

  7. 使用 docker 搭建 web 服务环境

    本文目的 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都会具有一定的依赖性的.对于 PHP 的 Web 开发来说,开发环境至少要有一个 Web 服务器(如 Apac ...

  8. Web服务(Apache、Nginx、Tomcat、Jetty)与应用(LAMP、CMS-WordPressGhost、Jenkins、Gitlab)

    Web服务和应用是目前信息技术领域的热门技术.如何使用Docker来运行常见的Web服务器(包括Apache.Nginx.Tomcat等),以及一些常用应用(LAMP.CMS等).包括具体的镜像构建方 ...

  9. 新手如何使用docker搭建web服务环境

    做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都会具有一定的依赖性的.对于 PHP 的 Web 开发来说,开发环境至少要有一个 Web 服务器(如 Apache.Ng ...

最新文章

  1. edge浏览器 开启java,启动Edge浏览器,然后等待其关闭[重复]
  2. shell中获取时间
  3. python数组排序(递归实现)
  4. PAT (Advanced Level) 1002. A+B for Polynomials (25)
  5. 【ArcGIS微课1000例】0015:ArcGIS如何创建/自定义快捷键?
  6. html5 css3左侧多级菜单,modernizr.custom.js制作html5 CSS3多级层叠侧边菜单导航栏
  7. 7-8 树的遍历 (10 分)
  8. Java基础学习总结(86)——Java异常处理机制Exception抛出异常时throw和throws用法详解
  9. python123组合数据类型_Python的组合数据类型-字典
  10. 实用的 Python 包 —— 使用 win32 的剪贴板
  11. duplicate symbols for architecture arm64的问题结决方法
  12. LINUX文件图标变化:有时右键菜单刷新可以,有时需要重启机器
  13. rgb矩阵Android程序,Android ColorMatrixColorFilter
  14. 问题 F: 求一个3*3矩阵对角线元素之和
  15. C语言歌手评分系统(入门水平)
  16. Android微博平台设计,基于Android平台的微博系统设计与开发
  17. excel查重复_毕业季论文查重攻略,手把手教你降低重复率!
  18. Spring Cache使用Redisson分布式锁解决缓存击穿问题
  19. Valley Numer hdu-6148
  20. 【word 2016】保存太慢解决办法

热门文章

  1. 黑客常用的攻击方式是哪些?
  2. 玩转Atlas200DK(十四)玩转摄像头
  3. 编程 学习视频教程大全
  4. PC(电脑)设置固定本地IP方法
  5. NSGA2 Matlab toolbox
  6. Unity新手必备!推荐一些免费模型、音乐等素材网址,推荐开发工具,故障、报错处理,推荐的官方资源包教程学习
  7. 使用HttpClient访问第三方api(绕过SSL证书验证访问https)
  8. axure添加下拉菜单联动
  9. 基于javaweb网上书城系统(前端+后端)
  10. 网络图片版权保护的主要问题