获取CXF端点的URL

MrB*_*977 6 java web-services cxf

情况

我正在使用Apache CXF 2.6.2将Web服务部署到Tomcat服务器.我正在使用CXFServlet和以下基于Spring的配置导出服务:

<?xml version="1.0" encoding="UTF-8"?>
<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://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
         http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

    <jaxws:endpoint id="test_endpoint"
                    implementor="org.xyz.TestImpl"
                    address="/test"/>

    <bean id="testBean" class="org.xyz.TestBean">
        <property name="endpoint" ref="test_endpoint" />
    </bean>
</beans>
Run Code Online (Sandbox Code Playgroud)

在我的示例部署中,CXFServlet使用相对路径/服务,例如,由TestImpl类实现的Web服务可用作http://domain.com/tomcat-context/services/test.TestBean 类具有端点的设置器和它由Spring设定.

目标

我想确定使用端点字段在类TestBean中由端点test_endpoint提供的地址(URL).结果应该是"http://domain.com/tomcat-context/services/test".

我试过的

log.info("Endpoint set to " + endpoint);
log.info("Address: " + endpoint.getAddress());
org.apache.cxf.jaxws.EndpointImpl ep = (org.apache.cxf.jaxws.EndpointImpl) endpoint;
log.info("Other Address: " + ep.getBindingUri());
log.info("Props: " + ep.getProperties());
Run Code Online (Sandbox Code Playgroud)

但结果是公正的

Address: /Sachbearbeiter
Other Address: null
Props: {}
Run Code Online (Sandbox Code Playgroud)

如何获取完整的URL?有没有办法没有自己建造它?

Yog*_*wla 2

您是否尝试过查看 CXF 消息以查看它是否位于其中一个属性中?我将 Camel 与 CXF 结合使用并获取实际的 CXF 消息,如下所示:

Message cxfMessage = exchange.getIn().getHeader(CxfConstants.CAMEL_CXF_MESSAGE, Message.class);
Run Code Online (Sandbox Code Playgroud)

您应该能够以简单的 CXF 格式获取 CXF 消息,如下所示:

PhaseInterceptorChain.getCurrentMessage()
Run Code Online (Sandbox Code Playgroud)

请参阅此 URL:有没有办法从 CXF 内的 JAX-RS REST 资源访问 CXF 消息交换?

从那里,您可以获得以下属性:

org.apache.cxf.request.url=someDomain/myURL
Run Code Online (Sandbox Code Playgroud)