定义webservice接口服务端

本文详细介绍了如何使用Apache CXF框架配置和部署Web服务,包括web.xml和cxf_server_beans.xml文件的设置,以及接口类和实现类的创建。强调了servlet-name、address和implementor的一致性,并提供了常见错误及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web.xml配置
<servlet>
   <servlet-name>xxx</servlet-name>
   <servlet-class>
      org.apache.cxf.transport.servlet.CXFServlet
   </servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
   <servlet-name>xxx</servlet-name>
   <url-pattern>/services/*</url-pattern>
</servlet-mapping>

cxf_server_beans.xml配置

<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" />

<bean id="MessageNotificationImpl" class="com.tydic.smpm.isag.service.impl.xxxImpl"></bean>

<jaxws:endpoint id="xxxService"
   implementor="#xxxImpl"
   address="/xxx">
   <jaxws:properties>
      <entry key="mtom-enabled" value="true"/>
   </jaxws:properties>
</jaxws:endpoint>

接口类

@WebService(targetNamespace="http://server.xxx.com")
public interface xxx {
    public void methodReceipt(@WebParam(name="param1")String xxx, @WebParam(name="param2")Xxx xxx) throws java.rmi.RemoteException;
}

实现类

@javax.jws.WebService(serviceName = "xxxImpl", targetNamespace = "http://server.xxx.com",
        endpointInterface = "cn.package.xxx")
@Service("xxxImpl")
public class xxxImpl implements xxx {
    public void methodReceipt(String param1, Xxx param2) {
        
    }
}

注意事项:

1、servlet-name和address必须相同,否则由于找不到服务会报错:

No service was found

2、刚开始在实现类上没有使用注解@Service("xxxImpl")标记为bean,导致缓存和业务service注入不进去

3、implementor和@Service("xxxImpl")里面的值必须相等,否则报错找不到bean

### 定义 Webservice 接口 定义 Webservice 接口可以通过两种主要的方式实现:基于 SOAP 协议的 WebService 和基于 HTTP 协议的 RESTful API。以下是两者的具体定义方法。 #### 基于 SOAP 的 Webservice 接口定义 SOAP(Simple Object Access Protocol)是一种标准协议,用于通过 XML 进行消息传递。为了创建一个基于 SOAP 的 Webservice 接口,可以按照以下方式进行: 1. **声明目标命名空间** 使用 `@WebService` 注解指定接口的目标命名空间以及操作名称。这有助于客户端识别服务端的功能范围。 2. **定义参数和返回值** 参数可通过 `@WebParam` 注解进行标注,以便在 WSDL 文件中更清晰地描述输入字段的作用。 下面是一个具体的例子: ```java import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService(targetNamespace = "http://example.com/webservice") public interface WsServiceSoap { @WebMethod(operationName = "SyncUser") public String syncUser(@WebParam(name = "userId") String userId); } ``` 上述代码片段展示了如何定义一个简单的 SOAP 风格的服务接口[^3]。该接口提供了一个名为 `syncUser` 的方法,接收一个字符串类型的用户 ID 并返回处理后的结果。 --- #### 基于 RESTful 的 API 接口定义 RESTful 是一种轻量级架构风格,它利用 HTTP 方法(GET、POST、PUT、DELETE 等)来执行 CRUD 操作,并通常采用 JSON 数据格式作为响应体的内容类型。 要定义一个 RESTful API 接口,可遵循如下模式: 1. **使用注解标记资源路径** 通过 `@Path` 或框架特定的注解(如 Spring 中的 `@RestController`),标明 URL 路径及其对应的控制器类或方法。 2. **支持多种请求方式** 对应不同的业务逻辑需求,可以选择 GET 请求获取数据、POST 提交新记录等。 示例如下所示: ```java import javax.ws.rs.*; import javax.ws.rs.core.MediaType; @Path("/users") public class UserService { @GET @Produces(MediaType.APPLICATION_JSON) public Response getUsers() { // 返回所有用户的列表 return Response.ok().entity(new UserList()).build(); } @POST @Consumes(MediaType.APPLICATION_JSON) public Response createUser(User user) { // 创建新的用户对象并保存到数据库 return Response.status(201).entity(user.getId()).build(); } } ``` 此部分代码展示的是一个典型的 RESTful 设计案例[^4],其中 `/users` 表达了一组实体集合的概念;当访问者发起 GET 请求时会收到整个集合的信息,而 POST 请求则允许向服务器提交新增的数据条目。 --- ### SOAP 与 RESTful 的对比总结 尽管二者都能完成远程调用的任务,但在实际应用中有显著差异。比如,在交互形式上,前者依赖复杂的 XML 文档结构并通过专门的消息头携带元信息;后者更加贴近互联网原生特性——简单直接地依靠 URI 地址定位资源位置再加上标准化的动作指令共同构成完整的语义表达体系。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值