加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

用Xfire将grails的服务展现为WebService

发布时间:2020-12-17 02:03:24 所属栏目:安全 来源:网络整理
导读:用 Xfire 框架可以用很简易的方法将 POJO 展现为 WebService ,而且 Xfire 还提供和 spring 的集成,可以很方便的将 spring 的 bean 展现为 WebService 。 Grails 的 service 在运行时会被 srping 托管,成为一个 bean ,因此可以用 Xfire 将其展现为 WebSer

Xfire框架可以用很简易的方法将POJO展现为WebService ,而且Xfire还提供和spring的集成,可以很方便的将springbean展现为WebServiceGrailsservice在运行时会被srping托管,成为一个bean,因此可以用Xfire将其展现为WebService。将grailsservice展现为WebService的步骤如下:

?

1.???????? 下载Xfire,将xfire和其依赖的jar复制到grails项目的lib目录中,展现WebService至少需要如下jar文件:

activation-1.1.jar

jaxen-1.1-beta-9.jar

jdom-1.0.jar

stax-api-1.0.1.jar

stax-utils-20040917.jar

wsdl4j-1.6.1.jar

wss4j-1.5.1.jar

wstx-asl-3.2.0.jar

xfire-all-1.2.6.jar

xfire-jsr181-api-1.0-M1.jar

?

2.???????? 为了让web容器将url请求转为web service,需要在web.xml中添加xfireservlet处理器,由于grailsweb.xml是根据模板动态生成的,因此需要修改grails安装目录下src/war/WEB-INF/web2.4.template.xml文件,在其中添加如下信息:

<servlet>

??? ?????? <servlet-name>XFireServlet</servlet-name>

??? ?????? <display-name>XFire Servlet</display-name>

??? ?????? <servlet-class>

?????? ??? ????org.codehaus.xfire.spring.XFireSpringServlet

?????? ??? </servlet-class>

? </servlet>

?

<servlet-mapping>

?????? ??? <servlet-name>XFireServlet</servlet-name>

?????? ??? <url-pattern>/servlet/XFireServlet/*</url-pattern>

</servlet-mapping>

?

?<servlet-mapping>

?????? ??? <servlet-name>XFireServlet</servlet-name>

?????? ??? <url-pattern>/services/*</url-pattern>

?</servlet-mapping>

?

?

contextConfigLocation<param-value>中添加classpath:org/codehaus/xfire/spring/xfire.xml,修改后内容如下:

<context-param>

??????? <param-name>contextConfigLocation</param-name>

??????? <param-value>/WEB-INF/applicationContext.xml,classpath:org/codehaus/xfire/spring/xfire.xml</param-value>

??? </context-param>

?

Xfire.xml位于xfire-all-1.2.6.jar中,其中定义了集成spring时要用到的bean

另外还要修改urlMappings.groovy,增加对WebService的处理,修改后内容如下:

"/$controller/$action?/$id?"{

?????? ????? constraints {

?????????????? controller(matches:/.*[^(services)].*/)

????????????? ? }

?????? ? }

黑体部分为修改内容。

?

3.???????? grailsservice添加一个接口,因为Xfire展现WebService时需要用到接口。在grailsservice中实现这个接口。接口以java方式定义,源文件位于src/java目录下。代码如下:

接口定义:

AsnService.java

package com.easipass.wms;

?

import javax.jws.WebService;

import javax.jws.WebMethod;

@WebService(serviceName="GasnService")

public interface AsnService {

?????? @WebMethod(operationName = "getName",action = "urn:GetName")

?????? String getName(String no) ;

?????? @WebMethod()

?????? Asn[] show();

}

?

接口定义了两个方法,并用jws注解方式标注接口展现为WebService的名字在@WebService serviceName中定义,jwsWebService的注解定义位于xfire-jsr181-api-1.0-M1.jar中。

show()方法返回一个Asn数组,Asn的定义如下:

Asn.java

package? com.easipass.wms;

import java.io.Serializable;

import java.util.Date;

public class? Asn implements Serializable {

??? String asnNo;

??? String sender;

??? Date??? sendDate ;

??? public Asn() {

??????? super();

??? }

??? public Asn(String asnNo,String sender,Date sendDate) {

??????? super();

??????? this.asnNo = asnNo;

??????? this.sender = sender;

??????? this.sendDate = sendDate;

??? }

??? public String getAsnNo() {

??????? return asnNo;

??? }

??? public void setAsnNo(String asnNo) {

??????? this.asnNo = asnNo;

??? }

??? public Date getSendDate() {

??????? return sendDate;

??? }

??? public void setSendDate(Date sendDate) {

??????? this.sendDate = sendDate;

??? }

??? public String getSender() {

??????? return sender;

??? }

??? public void setSender(String sender) {

??????? this.sender = sender;

??? }??

???

}

?

?

Grails中实现AsnServiceservice的定义如下:

GasnService.groovy

import com.easipass.wms.AsnService

import com.easipass.wms.Asn

import javax.jws.WebService

import java.util.Date

?

@WebService(endpointInterface="com.easipass.wms.AsnService")

class GasnService implements AsnService{

?

??? boolean transactional = false

?

??????

??? String getName(String no) {

??? ?????? return "Asn_${no}"

??? }

???

??? Asn[] show() {

??? ?????? Asn[] aa = new Asn[2];

??? ?????? aa[0] = new Asn("12345","Int",new Date())

??? ?????? aa[1] = new Asn("abcd","df",new Date())

??? ?????? println "size=${aa.size()}? ${aa[0].asnNo}"

??? ?????? return aa

??? }

}

?

4.???????? grails-app/conf/spring 下的resources.xml中添加对xfire注解的支持bean,内容如下:

?

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

<beans xmlns="http://www.springframework.org/schema/beans"? ?

?????? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??

?????? xsi:schemaLocation="??

?????? http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">??

??????

<bean id="webAnnotations" class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"></bean>

??????

?????? <bean id="jsr181HandlerMapping" class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping">

????????????? <property name="xfire" ref="xfire"></property>

????????????? <property name="webAnnotations" ref="webAnnotations"></property>

?????????????

?????? </bean>

?

</beans>

?

5.???????? 启动系统:grails run-app,在浏览器中输入http://localhost:8080/${appname}/services/ GasnService?wsdl可以得到展现为WebServiceGasnServiceWSDL。有了WSDL就可用各种客户端生成工具来生成WebService的访问程序。appname为grails创建的项目名。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读