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

webservice记录

阅读更多
1 查看jboss服务器上的所有webservice服务
http://localhost:8080/jbossws/services

2 用CXF框架实现webservice
现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService进行信息数据的操作。下面就将我们在开发中摸索的一点经验教训总结以下,以供大家参考.

我们项目的整个架构使用的比较流行的WSH MVC组合,即webwork2 + Spring + Hibernate;
1.首先集成Apacha CXF WebService 到 Spring 框架中;
apache cxf 下载地址:http://people.apache.org/dist/incubator/cxf/2.0.4-incubator/apache-cxf-2.0.4-incubator.zip
在spring context配置文件中引入以下cxf配置
<import resource="classpath*:META-INF/cxf/cxf.xml" />

<import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" />

<import resource="classpath*:META-INF/cxf/cxf-servlet.xml" />


在web.xml中添加过滤器:
<servlet>

<servlet-name>CXFServlet</servlet-name>

<servlet-class>

org.apache.cxf.transport.servlet.CXFServlet

</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>CXFServlet</servlet-name>

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

</servlet-mapping>



2.开发服务端WebService接口:
/**

* WebService接口定义类.

*

* 使用@WebService将接口中的所有方法输出为Web Service.

* 可用annotation对设置方法、参数和返回值在WSDL中的定义.

*/

@WebService

public interface WebServiceSample {





/**

* 一个简单的方法,返回一个字符串

* @param hello

* @return

*/

String say(String hello);



/**

* 稍微复杂一些的方法,传递一个对象给服务端处理

* @param user

* @return

*/

String sayUserName(

@WebParam(name = "user")

UserDTO user);



/**

* 最复杂的方法,返回一个List封装的对象集合

* @return

*/

public

@WebResult(partName="o")

ListObject findUsers();



}


由简单到复杂定义了三个接口,模拟业务需求;

3.实现接口
/**

* WebService实现类.

*

* 使用@WebService指向Interface定义类即可.

*/

@WebService(endpointInterface = "cn.org.coral.biz.examples.webservice.WebServiceSample")

public class WebServiceSampleImpl implements WebServiceSample {



public String sayUserName(UserDTO user) {

return "hello "+user.getName();

}



public String say(String hello) {

return "hello "+hello;

}



public ListObject findUsers() {

ArrayList<Object> list = new ArrayList<Object>();



list.add(instancUser(1,"lib"));

list.add(instancUser(2,"mld"));

list.add(instancUser(3,"lq"));

list.add(instancUser(4,"gj"));

ListObject o = new ListObject();

o.setList(list);

return o;

}



private UserDTO instancUser(Integer id,String name){

UserDTO user = new UserDTO();

user.setId(id);

user.setName(name);

return user;

}

}



4.依赖的两个类:用户对象与List对象
/**

* Web Service传输User信息的DTO.

*

* 分离entity类与web service接口间的耦合,隔绝entity类的修改对接口的影响.

* 使用JAXB 2.0的annotation标注JAVA-XML映射,尽量使用默认约定.

*

*/

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "User")

public class UserDTO {



protected Integer id;



protected String name;



public Integer getId() {

return id;

}



public void setId(Integer value) {

id = value;

}



public String getName() {

return name;

}



public void setName(String value) {

name = value;

}

}


关于List对象,参照了有关JWS的一个问题中的描述:DK6.0 自带的WebService中 WebMethod的参数好像不能是ArrayList 或者其他List
传递List需要将List 包装在其他对象内部才行 (个人理解 如有不对请指出) ,我在实践中也遇到了此类问题.通过以下封装的对象即可以传递List对象.
/**

* <p>Java class for listObject complex type.

*

* <p>The following schema fragment specifies the expected content contained within this class.

*

* <pre>

* <complexType name="listObject">

*   <complexContent>

*     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">

*       <sequence>

*         <element name="list" type="{http://www.w3.org/2001/XMLSchema}anyType" maxOccurs="unbounded" minOccurs="0"/>

*       </sequence>

*     </restriction>

*   </complexContent>

* </complexType>

* </pre>

*

*

*/

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "listObject", propOrder = { "list" })

public class ListObject {



@XmlElement(nillable = true)

protected List<Object> list;



/**

* Gets the value of the list property.

*

* <p>

* This accessor method returns a reference to the live list,

* not a snapshot. Therefore any modification you make to the

* returned list will be present inside the JAXB object.

* This is why there is not a <CODE>set</CODE> method for the list property.

*

* <p>

* For example, to add a new item, do as follows:

* <pre>

*    getList().add(newItem);

* </pre>

*

*

* <p>

* Objects of the following type(s) are allowed in the list

* {@link Object }

*

*

*/

public List<Object> getList() {

if (list == null) {

list = new ArrayList<Object>();

}

return this.list;

}



public void setList(ArrayList<Object> list) {

this.list = list;

}



}



5.WebService 服务端 spring 配置文件 ws-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"

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

xmlns:jaxws="http://cxf.apache.org/jaxws"

xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd

http://www.springframework.org/schema/beans 

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

default-autowire="byName" default-lazy-init="true">



<jaxws:endpoint id="webServiceSample"

address="/WebServiceSample" implementor="cn.org.coral.biz.examples.webservice.WebServiceSampleImpl"/>



</beans>



WebService 客户端 spring 配置文件 wsclient-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"

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

xmlns:jaxws="http://cxf.apache.org/jaxws"

xsi:schemaLocation="http://cxf.apache.org/jaxws

http://cxf.apache.org/schemas/jaxws.xsd

http://www.springframework.org/schema/beans 

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

default-autowire="byName" default-lazy-init="true">



<!-- ws client -->

<bean id="identityValidateServiceClient" class="cn.org.coral.admin.service.IdentityValidateService"

factory-bean="identityValidateServiceClientFactory" factory-method="create" />



<bean id="identityValidateServiceClientFactory"

class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">

<property name="serviceClass"

value="cn.org.coral.admin.service.IdentityValidateService" />

<property name="address"

value="http://88.148.29.54:8080/coral/services/IdentityValidateService"/>

</bean>



</beans>


6.发布到tomcat服务器以后通过以下地址即可查看自定义的webservice接口生成的wsdl:
http://88.148.29.54:8080/aio/services/WebServiceSample?wsdl

7.调用WebService接口的Junit单元测试程序
package test.coral.sample;



import org.springframework.test.AbstractDependencyInjectionSpringContextTests;



import cn.org.coral.biz.examples.webservice.WebServiceSample;

import cn.org.coral.biz.examples.webservice.dto.UserDTO;



public class TestWebServiceSample extends

AbstractDependencyInjectionSpringContextTests {

WebServiceSample webServiceSampleClient;



public void setWebServiceSampleClient(WebServiceSample webServiceSampleClient) {

this.webServiceSampleClient = webServiceSampleClient;

}



@Override

protected String[] getConfigLocations() {

setAutowireMode(AUTOWIRE_BY_NAME);

//spring 客户端配置文件保存位置

return new String[] { "classpath:/cn/org/coral/biz/examples/webservice/wsclient-context.xml" };

}



public void testWSClinet(){

Assert.hasText(webServiceSampleClient.say(" world"));

}

}
分享到:
评论

相关推荐

    c#2.0使用TraceExtension记录WebService的Soap日志

    在本讨论中,我们将深入探讨如何利用C# 2.0的TraceExtension来记录WebService的SOAP日志。这对于调试、性能分析以及理解服务间的交互至关重要。 SOAP(简单对象访问协议)是Web服务的标准通信协议,用于交换结构化...

    C# webservice操作技术记录.doc

    C# Web Service 操作技术记录主要涉及如何创建和利用Web Service进行通信。Web Service是一种基于标准的、平台无关的方式,允许不同系统间的应用程序通过网络进行交互。以下将详细阐述整个过程: 1. **生成WSDL文件...

    Java使用XFire调用WebService接口

    这篇博客“Java使用XFire调用WebService接口”显然是讨论如何利用XFire这个开源框架来与Web服务交互。 XFire是Apache CXF项目的前身,它提供了一种简单的方式来创建和消费SOAP Web服务。XFire的强项在于其轻量级和...

    CXF打印SOAP报文,记录WebService日志

    ### CXF打印SOAP报文与记录WebService日志 在企业级应用开发中,尤其是涉及到服务端接口(如WebService)的设计与实现时,日志记录变得尤为重要。它不仅可以帮助开发者更好地理解系统运行状况、定位问题所在,还能...

    C#最简单最完整的webservice实例(能打log,配有log4net)

    【C#最简单最完整的Web服务(WebService)实例与日志记录(log4net)】 在C#编程中,创建一个简单的Web服务(WebService)可以帮助开发者实现不同应用程序间的通信。本实例将展示如何构建一个基本的C# WebService,...

    webservice模拟客户端测试工具WebserviceStudio20.rar

    5. **日志记录**:测试过程中的所有请求和响应都会被记录下来,便于后期分析和问题排查。 6. **多协议支持**:WebserviceStudio20不仅支持SOAP协议,还可能支持RESTful API,适应不同类型的Web服务接口。 7. **...

    Idea实现WebService实例

    - **拦截器**:通过自定义拦截器,可以在服务调用前/后执行特定逻辑,如日志记录、性能监控等。 总之,通过Idea创建和实现WebService是一个直观且高效的过程,借助CXF这样的框架,可以快速地构建高质量的Web服务。...

    使用ASP.NET一般处理程序或WebService返回JSON的实现代码

     * 准备 * 一般处理程序/ashx * WebService/asmx准备 如果希望通过 ashx 或者 asmx 来返回 JSON, 那么需要引用程序集 System.Web.Extensions.dll, 在 .NET 3.5, 4.0 中已经默认包含. 对于 .NET 2.0, 3.0, 需要...

    在WinForm程序中调用WebService

    在这个例子中,如果你的支付信息存储在数据库中,DAL层将负责插入或更新支付记录。 5. **实体类**: - 实体类用于封装数据,例如,你可以有一个`Payment`类来表示支付信息: ```csharp public class Payment { ...

    WebServiceStudio C#源码

    10. **调试和日志记录**:为了方便开发者定位问题,源码可能包含了一些调试工具和日志记录功能,可以帮助跟踪代码执行流程和错误信息。 通过学习和分析WebServiceStudio的源码,开发者不仅可以提升C#编程能力,还能...

    C#webservice调用测试工具

    这个工具可能包含了各种功能,如模拟调用Web Service接口,查看和编辑请求/响应数据,验证返回结果,性能测试,以及可能的日志记录和错误调试功能。 总的来说,C# WebService调用测试工具是一个强大的开发辅助工具...

    WebService电视节目预报

    7. **历史记录管理**:考虑到文件列表中有"history",这可能表示程序还包括对用户浏览历史的记录和管理。可以实现一个功能,让用户保存或查看他们之前查看过的电视节目预报,这可能涉及到本地存储技术,如Flash的...

    SAP Webservice日志查询报表 V3

    在IT领域,SAP Web服务(SAP Webservice)是一种重要的技术,用于集成不同系统间的业务流程。SAP Webservices允许外部系统调用SAP的功能模块,实现数据交换和服务共享。"SAP Webservice日志查询报表 V3"是一个专门...

    SqlServer触发器调用WebService

    触发器可以用来维护数据一致性、实施业务规则或记录审计日志等。 #### 二、WebService简介 WebService是一种开放标准协议,用于在网络上交换数据和执行远程过程调用。WebService可以通过HTTP协议进行通信,并且...

    WebService接口测试工具

    4. **调试**:在遇到问题时,工具通常会提供日志记录和调试功能。你可以查看请求和响应的详细信息,包括HTTP头和XML消息内容,以便找出潜在问题。 5. **自动化测试**:一些高级工具还支持脚本编写,使你能够创建...

    webService调取IP所在地,以及获得客户端真实IP

    webService调取IP所在地,以及获得客户端真实IP

    Delphi WebService操作数据库

    ### Delphi WebService操作数据库 #### 一、项目背景与目的 在开发Web服务时,经常需要通过Delphi与数据库进行交互,实现数据的增删改查等操作。本篇文章将详细介绍如何使用Delphi开发一个可以操作数据库的Web服务...

    webservice测试调用工具WebserviceStudio20

    8. **历史记录**:保存和管理请求历史,方便对比不同请求的响应,或者重复执行过去的测试。 9. **插件扩展**:高级版本可能支持插件,允许扩展其功能,例如添加对新协议的支持或集成到持续集成流程中。 10. **性能...

    Delphi调用C#的Webservice返回Dataset

    2. **C#开发Webservice**: 在C#中,可以使用.NET框架的ASP.NET技术创建Web服务。首先,创建一个新的ASP.NET Web服务项目,然后定义一个或多个公共方法,这些方法将在服务中公开。例如,为Delphi客户端提供操作...

    webservice测试调用工具WebserviceStudio20.rar

    8. **日志记录**:测试过程中的所有请求和响应通常会被记录下来,便于后续分析和问题排查。 使用WebserviceStudio20进行Web Service测试时,首先要确保你有服务的WSDL URL,这是描述服务接口和操作的规范文档。然后...

Global site tag (gtag.js) - Google Analytics