在同一个类中结合REST和SOAP服务?

时间:2014-07-24 07:44:35

标签: java web-services rest soap

我有一个正在运行的SOAP服务,并希望发布与REST相同的方法。是否可以在同一个班级中使用REST

@Component
@WebService
public class MyService extends SpringBeanAutowiringSupport {
    @WebMethod
    //@GET
    public String ping(@WebParam("input") String test) {
        return test;
    }
}

<jaxws:endpoint implementor="de.test.MyService" address="/MyService" />
<!-- <jaxrs:server serviceClass="de.test.MyService" address="/HRSService" /> -->

如果我对@GETjaxrs发表评论,则会引发以下错误:

org.apache.cxf.service.factory.ServiceConstructionException: There is an endpoint already running on /MyService.

所以,我不能在同一个服务中运行。

1 个答案:

答案 0 :(得分:2)

几年前我做了这个,以便第三方移动应用程序开发人员可以按照自己的条件集成我公司的产品数据(使用SOAP或REST / JSON,他们为他们的iPhone选择了REST / JSON应用程序)。我创建了一个清理版本,供参考:

m2-soap-restMaven - 构建了JAX-WS / JAX-RS示例项目)

我使用单数方法从同一模型输出两种格式。如果你引用的接口/类实现组合:

SoapRestServiceIntf.java
SoapRestServiceImpl.java

然后,希望您能够了解我为了从相同的方法/对象表示返回SOAP / XML(JAX-WS)或REST / JSON(JAX-RS)所做的工作。

请参阅注释,例如&#39; @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON} )&#39;,这取决于所请求的主叫客户{ {3}}(这决定了客户的预期响应格式)。

怀旧地,传回我的代码让我注意到一些遗漏(这是第一次尝试),然而,巧合的是,我最近不得不使用JAX-RS / CXF重新访问REST / JSON,所以我有更多实际的JAX-RS项目,包括输入类型规范注释,字段验证和RESTful测试(使用'Accept' header),可在以下位置找到:

REST-assuredFeedbackCXF - 构建了JAX-RS示例项目)

这个较新的项目不输出两种数据类型 ,我提到它,因为您可能会发现它对进一步参考有用。

我个人无法保证这是否是最佳做法,它当时对我有用。

我希望你觉得这很有用。

BTW如果你想知道切换离GradleMaven是No-XML(更简洁易读),基本上是标准Gradle代码(即类似Java,能够在构建过程中进行简单的for循环/普通编程等。