gpt4 book ai didi

spring - 使用 Spring 在 CXF 中配置多个 resouceBean

转载 作者:行者123 更新时间:2023-12-05 00:00:41 26 4
gpt4 key购买 nike

我正在使用带有 Spring 3.0.6-RELEASE 的 CXF RS 2.5.1。我想为“单个端点”提供多个实现类。我看到有人报告并修复了这个问题 https://issues.apache.org/jira/browse/CXF-2439但是,当我尝试这样做时,CXF 只是从 jaxrs:serviceBeans 标记中选择第一个资源类。对于另一个请求,我在 tomcat 控制台上看到此消息为“找不到匹配请求路径/account/rest/transfer 的操作”。下面是配置。感谢任何输入。

web.xml

    <listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:account-servlet.xml</param-value>
</context-param>

<servlet>
<servlet-name>CXF Servlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>CXF Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

account-servlet.xml
    <jaxrs:server id="accountService" address="/rest">
<jaxrs:serviceBeans>
<ref bean="transferService" />
<ref bean="balanceService"/>
</jaxrs:serviceBeans>
<jaxrs:extensionMappings>
<entry key="xml" value="application/xml" />
</jaxrs:extensionMappings>
</jaxrs:server>


<bean id="transferService" class="com.mycompany.service.TransferService"/>
<bean id="balanceService" class="com.mycompany.service.BalanceService"/>

BalanceService.java(省略导入)
        package com.mycompany.service;
@Path("/")
@Produces("application/xml")
public class BalanceService{

@GET
@Path("/balance")
public String getBalance() {
StringBuilder response = new StringBuilder(128);
response.append("<Balance>")
.append("<amount>").append("250.00").append("</amount>")
.append("</Balance>");
return response.toString();
}
}

TransferService.java(省略导入)
package com.mycompany.service;

@Path("/")
@Produces("application/xml")
public class TransferService {

@GET
@Path("/transfer")
public String getTransfer() {

StringBuilder response = new StringBuilder(128);
response.append("<Transfer>")
.append("<amount>").append("350.00").append("</amount>")
.append("</Transfer>");
return response.toString();
}
}

请忽略任何编程违规/标准,因为它只是 POC 的示例应用程序。

最佳答案

我通过将 @Path 映射的一部分移动到服务 bean 类来解决这个问题。在你的情况下:

BalanceService

@Path("/balance")
@Produces("application/xml")
public class BalanceService {
@GET
@Path("/{id}")
public String getBalance(@PathParam("id") long id) {
...
}
}

TransferService
@Path("/transfer")
@Produces("application/xml")
public class TransferService {

@GET
@Path("/{id}")
public String getTransfer(@PathParam("id") long id) {
...
}
}

关于spring - 使用 Spring 在 CXF 中配置多个 resouceBean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9725770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com