webServie的RESTful类型服务端

本文详细介绍了如何利用Spring框架构建RESTful Web服务,包括配置Web容器、定义和实现API接口、使用Spring注解进行依赖注入、以及如何在服务端处理请求和响应。重点阐述了如何在应用中整合CXF作为Web服务组件,以及如何通过Spring管理Web服务的生命周期。同时,文章还涉及了如何在项目中创建API接口、WS实现类和服务接口,并通过具体代码实例展示这些过程。

1 web.xml

<servlet>
        <servlet-name>CXFServlet</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/ws/*</url-pattern>
</servlet-mapping>

2 applicationContext.xml

<import resource="restfulContext.xml" />

3 restfulContext.xml

<jaxrs:server id="restfulServer" address="/rest">
  <jaxrs:serviceBeans>
   <ref bean="webDutyWSImpl" />
  </jaxrs:serviceBeans>
  <jaxrs:providers>   
      <bean class="com.huawei.support.security.JAXRSAuthHandler"></bean>
      <bean class="com.huawei.support.provider.ApplicationExceptionMapper"></bean>
      <bean class="com.huawei.support.provider.MapMessageBodyReader"></bean>
      <bean class="com.huawei.support.provider.MapMessageBodyWriter"></bean>
      <bean class="com.huawei.support.provider.StringListMessageBodyReader"></bean>
      <bean class="com.huawei.support.provider.StringListMessageBodyWriter"></bean>
      <bean class="com.huawei.support.provider.DataHandlerMessageBodyReader"></bean>
      <bean class="com.huawei.support.provider.DataHandlerMessageBodyWriter"></bean>
      </jaxrs:providers>
  <jaxrs:extensionMappings>
      <entry key="json" value="application/json" />
      <entry key="xml" value="application/xml" />
  </jaxrs:extensionMappings>
 </jaxrs:server>

 

4 另起一个API项目包SupportWS-RS-API,在其中定义WS接口

@Path("/webduty")
@Produces(MediaType.APPLICATION_JSON)
public interface IWebDutyWS{
  
  @POST
  @Path("/webdutyrole")
  @Consumes(MediaType.APPLICATION_JSON)
  List<DictItemBean> getDictItemList(@QueryParam("") DictItemBean param) throws RecoveryException;
}

5在WS项目下建立WS实现类

@Component("webDutyWSImpl")          //本来是@Service,我换成了@Component一样可以
public class WebDutyWSImpl implements IWebDutyWS  
{
    @Autowired
    @Qualifier("webDutyServiceImpl")
    private IWebDutyService webDutyServiceImpl;   //注入服务实现类
    
    @Override
    public List<DictItemBean> getDictItemList(DictItemBean param)throws RecoveryException
    {
       List<DictItemBean> roleList = webDutyServiceImpl.getDictItemList(param);   //调用服务实现类的方法
        return roleList;
    }
}

6在WS项目下建立Service接口

public interface IWebDutyService
{
    List<DictItemBean> getDictItemList(DictItemBean dictItem);
}

 

7在WS项目下建立Service实现类

@Component("webDutyServiceImpl")  //本来是@Service,我换成了@Component一样可以
public class WebDutyServiceImpl implements IWebDutyService
{
    @Autowired
    @Qualifier("webDutyDao")
    private WebDutyDao webDutyDao;   
    
    @Override
    public List<DictItemBean> getDictItemList(DictItemBean param)
    {
        List<DictItemBean> restult = new ArrayList<DictItemBean>();
        if (param != null && !StringUtil.isNullOrEmpty(param.getClassifyId()))
        {
            String[] classfyIds = param.getClassifyId().trim().split(",");
            for (String id : classfyIds)
            {
                param.setClassifyId(id);
                restult.addAll(webDutyDao.getDictItemList(param));
            }
        }
        return restult;
    }
 }   

 

---------------------------------RESTful服务端完成--------------------------

后记1
@Produces 注释代表的是一个资源可以返回的 MIME 类型。写出到response的内容类型。
@Consumes 注释代表的是一个资源可以接受的 MIME 类型。客户端request传过来的内容类型。

后记2 

公司的项目使用的是Spring3.0。从Spring 2.5 开始,除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。在目前的Spring 版本中,这 3 个注释和 @Component 是等效的,Spring 将在以后的版本中为它们添加特殊的功能。所以,如果 Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用 @Repository、@Service 和 @Controller 对分层中的类进行注释,而用 @Component 对那些比较中立的类进行注释。

在applicationContext.xml打开自动扫描,并定义扫描路径
<context:component-scan base-package=”com.eric.spring”>   
 这种方式的bean默认是单例的,如果想改变,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意):

@PostConstruct public void init() { }

@PreDestroy public void destory() { }


 

转载于:https://www.cnblogs.com/onlywujun/archive/2012/12/06/2805104.html

所给引用内容中未提及使用Axis2生成WebService的WSDL文件的方法。通常情况下,使用Axis2生成WebService的WSDL文件,一般有以下通用步骤: 首先,确保已经有一个实现了WebService的Java类。这个类应该使用JAX - WS注解来定义服务接口和操作。 示例代码如下: ```java import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class HelloWorld { @WebMethod public String sayHello(String name) { return "Hello, " + name; } } ``` 然后,在Axis2中,可以使用以下方式来部署服务并生成WSDL: 1. **使用Axis2的Servlet部署** 将实现了WebService的类打包成WAR文件,并部署到支持Servlet的容器(如Tomcat)中。配置Axis2的Servlet,在`web.xml`中添加相关配置: ```xml <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> ``` 部署成功后,访问服务的URL,例如`http://localhost:8080/yourApp/services/HelloWorld?wsdl`,即可获取生成的WSDL文件。 2. **使用Axis2的命令行工具(如果适用)** 可以尝试使用Axis2提供的一些命令行工具来生成WSDL,但这种方式在不同版本中可能有所差异。有些版本可能会有类似`wsdlgen`之类的工具来根据Java类生成WSDL。 需要注意的是,具体的操作步骤可能会因Axis2的版本和使用的环境而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值