EJB容器模型的WebService服務
阿新 • • 發佈:2019-01-24
---WEB服務
使用無狀態會話 將其 釋出為 webService 下面沒有配置資料來源,使用的是模擬資料
匯入 E:\jboss-6.0.0.Final\client 下的jar
實體bean
OrderService.java
OrderServiceBean.java
--使用ANT 編譯釋出
-->釋出後 進入 jboss 後臺控制 檢視 釋出的服務
http://localhost:8989/jbossws --> View a list of deployed services
-->點選 Endpoint Address http://localhost:8989/WebService/OrderServiceBean/OrderService
進入後我們可以看到
targetNamespace="http://ws.sh.cn" //名稱空間
<wsdl:service name="OrderServiceBean"> //服務名稱 def: //OrderServiceBeanService
<wsdl:portType name="OrderService"> //埠名稱 def: OrderServiceBean
如果後面 def(預設命名) 看不的不是很習慣呢 就可以通過上面的
@WebService(targetNamespace="http://ws.sh.cn",//namespace
name="OrderService", //protype name
serviceName="OrderServiceBean" //Service Name
) 這個註解中加入屬性配置就 可以了
--- 開發ws客戶端應用
--準備jar 和jdk 的版本
如果使用的JDK 中使用JAX_WS 版本 低於 我們引用的jax_ws 的jar 需要在
JDK_HOME/jre/lib/endorsed(新建) \ 加入 jaxws-api.jar 和 jaxb-api.jar
如果使用myeclipse 就需要修改myclipse 使用的JDK 為系統中安裝的JDK
2.使用web-service客戶端工具生成輔助類 (Ant配置生成)
3.藉助輔助類 呼叫 web service
1.匯入 下載的 jax-ws \lib\*.jar
2.編寫 ant配置檔案 生存 輔助類
--Ant ---build.xml
-->編譯執行 (在大綱檢視找那個 outline中)
//http://localhost:8989/WebService/OrderServiceBean/OrderService?wsdl 為jboss 控制後我們已經發布的 WEBservice 服務路徑
就是 點選
http://localhost:8989/WebService/OrderServiceBean/OrderService 後 瀏覽器中的地址
然後重新整理 專案 就可以看到 自動生成的 com.sh.ws.client 包 和 類
---然後 test
這樣就可以呼叫 webservice 中的方法了
WEB服務市一種分散式技術,它與EJB最大的不同是,WEB服務屬於行業規範,可以跨平臺及語言.而EJB屬於java平臺規範.理論上可以跨平臺,但是實現起來比較複雜.所以其應用範圍侷限了java平臺.看上去是競爭關係,其實不是
WEB服務:偏重這個系統對外提供什麼功能.
EJB :偏重如何使用這個元件組裝這些功能.
JavaEE 為web service 提供了兩種不同的程式設計模型.
EJB容器模型
web容器模型
下面用最新的JAX-WS 2.2.7 (JAVA API for XML-base WEB Service )來介紹EJB 容器模型的 webservice開發
使用無狀態會話 將其 釋出為 webService 下面沒有配置資料來源,使用的是模擬資料
匯入 E:\jboss-6.0.0.Final\client 下的jar
實體bean
package com.sh.bean; import java.io.Serializable; public class Order implements Serializable{ private static final long serialVersionUID = 7401607038300453322L; private String orderid; private String name; public String getOrderid() { return orderid; } public void setOrderid(String orderid) { this.orderid = orderid; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
OrderService.java
package com.sh.service;
import java.util.List;
import com.sh.bean.Order;
public interface OrderService {
public String getUserName(String name);
public Order getOrder(String orderid);
public List<Order> getOrders();
}
OrderServiceBean.java
package com.sh.service.impl; import java.util.ArrayList; import java.util.List; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebService; import com.sh.bean.Order; import com.sh.service.OrderService; //釋出為 webservice 服務 @WebService(targetNamespace="http://ws.sh.cn",//namespace name="OrderService", //protype name serviceName="OrderServiceBean" //Service Name ) @Stateless @Remote(OrderService.class) public class OrderServiceBean implements OrderService { //@WebMethod //標註後 會將此方法 暴露給webservice @Override public String getUserName(String name) { // TODO Auto-generated method stub return name; } @Override public Order getOrder(String orderid) { Order order =new Order(); order.setOrderid(orderid); order.setName("小燕子"); return order; } @Override public List<Order> getOrders() { // TODO Auto-generated method stub List<Order> person=new ArrayList<Order>(); Order order1 =new Order(); order1.setOrderid("001"); order1.setName("小2"); Order order2 =new Order(); order2.setOrderid("002"); order2.setName("小3"); person.add(order1); person.add(order2); return person; } }
--使用ANT 編譯釋出
<?xml version="1.0" encoding="UTF-8"?> <!-- ====================================================================== 2013-2-25 下午1:53:33 project description Bin ====================================================================== --> <project name="WebService" basedir="."> <description> description </description> <!-- 設定專案原目錄 --> <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"/> <!-- 引入 jboss client 下的 所有jar --> <path id="build.classpath"> <fileset dir="${jboss.home}\client"> <include name="*.jar"/> </fileset> <!-- 講編譯過後的路徑加入到 path中去 方便 介面和實現的引用 --> <pathelement location="${build.dir}"/> </path> <target name="prepare" description="建立build目錄"> <delete dir="${build.dir}"/> <mkdir dir="${build.dir}"/> </target> <!-- - - - - - - - - - - - - - - - - - target: compile - - - - - - - - - - - - - - - - - --> <target name="compile" depends="prepare" description="編譯"> <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" includes="com/**"> <classpath refid="build.classpath"/> </javac> </target> <!-- ================================= target: ejbjar ================================= --> <target name="ejbjar" depends="compile" description="建立EJB釋出包"> <jar jarfile="${basedir}\${ant.project.name}.jar"> <fileset dir="${build.dir}"> <include name="**/*.class"/> </fileset> </jar> </target> <!-- ================================= target: deploy ================================= --> <target name="deploy" depends="ejbjar" description="釋出EJB"> <copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy"/> </target> <!-- - - - - - - - - - - - - - - - - - target: undeploy - - - - - - - - - - - - - - - - - --> <target name="undeploy" description="解除安裝EJB"> <delete file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar"/> </target> </project>
-->釋出後 進入 jboss 後臺控制 檢視 釋出的服務
http://localhost:8989/jbossws --> View a list of deployed services
-->點選 Endpoint Address http://localhost:8989/WebService/OrderServiceBean/OrderService
進入後我們可以看到
targetNamespace="http://ws.sh.cn" //名稱空間
<wsdl:service name="OrderServiceBean"> //服務名稱 def: //OrderServiceBeanService
<wsdl:portType name="OrderService"> //埠名稱 def: OrderServiceBean
如果後面 def(預設命名) 看不的不是很習慣呢 就可以通過上面的
@WebService(targetNamespace="http://ws.sh.cn",//namespace
name="OrderService", //protype name
serviceName="OrderServiceBean" //Service Name
) 這個註解中加入屬性配置就 可以了
--- 開發ws客戶端應用
--準備jar 和jdk 的版本
如果使用的JDK 中使用JAX_WS 版本 低於 我們引用的jax_ws 的jar 需要在
JDK_HOME/jre/lib/endorsed(新建) \ 加入 jaxws-api.jar 和 jaxb-api.jar
如果使用myeclipse 就需要修改myclipse 使用的JDK 為系統中安裝的JDK
2.使用web-service客戶端工具生成輔助類 (Ant配置生成)
3.藉助輔助類 呼叫 web service
1.匯入 下載的 jax-ws \lib\*.jar
2.編寫 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://localhost:8989/WebService/OrderServiceBean/OrderService?wsdl"
sourcedestdir="${src.dir}" package="com.sh.ws.client" keep="true"
verbose="true" destdir="${basedir}/bin" xendorsed="true"/>
</target>
</project>
-->編譯執行 (在大綱檢視找那個 outline中)
//http://localhost:8989/WebService/OrderServiceBean/OrderService?wsdl 為jboss 控制後我們已經發布的 WEBservice 服務路徑
就是 點選
http://localhost:8989/WebService/OrderServiceBean/OrderService 後 瀏覽器中的地址
然後重新整理 專案 就可以看到 自動生成的 com.sh.ws.client 包 和 類
---然後 test
package junit.test;
import java.util.List;
import org.junit.BeforeClass;
import org.junit.Test;
import com.sh.ws.client.Order;
import com.sh.ws.client.OrderService;
import com.sh.ws.client.OrderServiceBean;
public class WSTest {
@Test
public void getUserName() {
//通過 釋出的 服務物件bean 和 埠 來得到 服務介面類
//和 JAVA中 介面的例項化 需要 通過實現類來 初始化
OrderServiceBean serice=new OrderServiceBean();
//介面
OrderService orderService=serice.getOrderServicePort();
//呼叫方法
System.out.println(orderService.getUserName("西遊降魔"));
}
@Test
public void getOrder() {
OrderServiceBean serice=new OrderServiceBean();
OrderService orderService=serice.getOrderServicePort();
Order order =orderService.getOrder("999");
System.out.println(order.getOrderid()+"\\"+order.getName());
}
@Test
public void getOrders() {
OrderServiceBean serice=new OrderServiceBean();
OrderService orderService=serice.getOrderServicePort();
List<Order> orders=orderService.getOrders();
for (Order order2 : orders) {
System.out.println(order2.getOrderid()+"\\"+order2.getName());
}
}
}
這樣就可以呼叫 webservice 中的方法了