java - CXF配置问题

标签 java web-services jax-ws cxf

我使用 CXF 生成客户端工件并使用 java2ws 插件生成我的 wsdl。

在用于在 tomcat 上生成 WSDL 的 CXF 配置中,您需要定义 jaxws:endpoint - 我在 jaxws:endpoint 地址属性的 CXF 配置设置方面遇到问题。最终生成的wsdl有语法问题

CXF.xml(在我的 MAVEN POM 中不使用 spring jar)->

<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" />
 <jaxws:endpoint id="JMSMetricsServiceEndpoint" 
      implementor="com.putnam.jms.monitor.websvcs.JMSMetricsService"
      address="/">
 </jaxws:endpoint>

jaxws:address 元素指定在定义正在部署的服务的 WSDL 文件中定义的端点地址。这需要将正确的soap:address 的绝对URL 规范写入生成的WSDL。目前,它设置为“/” - 这对我有用 - 因为地址直接从 wsdl 准备就绪,除了它在soap:address 末尾附加一个尾部斜杠 -> 当它生成 wsdl 作为最终产品时

 <soap:address = ' ...... /'> 

我的目标是让它以一种没有过多/附加的方式进行部署。

我尝试完全删除地址字段,但没有成功。我还尝试过对地址进行硬编码,即使用绝对 URI

 <jaxws:endpoint
 id="JMSMetricsServiceEndpoint" 
       implementor="com.putnam.jms.monitor.websvcs.JMSMetricsService"
       address="${HOST_NAME}">

其中 $HOST_NAME = wsdl 所在的完整 http 路径...

示例 $HOST_NAME = "http://localhost..."

但这似乎也不起作用。

该更改目前会导致 WSDL 格式错误,即使它指向正确的方向。

最佳答案

Adi,我在您的描述中发现了一个矛盾 - 您是说您正在生成客户端工件,但您的配置是针对服务端点的。对于客户端,适当的配置是 -

<jaxws:client...>

不是

<jaxws:endpoint..>

假设您正在编写一个服务而不是客户端,地址是相对的,当您从服务请求 wsdl 时,服务的 url 将从请求 url 和您指定的地址的相对 URI 派生,除非您想使用 jaxws:service 的 wsdlLocation 参数指定显式 wsdl(不是生成的)。

关于java - CXF配置问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673607/

相关文章:

java - 无法使 JAX-WS 绑定(bind)自定义工作

java - 如何使用 JAX-WS webfault

java - Webapp 在实例化 PoolingHttpClientConnectionManager 时停止

具有微秒或纳秒精度的 Java 日期解析

java - 使用 Spring 代理时如何查看和调试 Web 服务响应?

php - 从 wsdl 生成 php 代码

java - WebService 无法处理没有命名空间前缀的 SOAP 主体的请求

java - 记录 jax-ws http 请求和响应

java - 即时为 iPhone 创建引用电影

java - 为java程序创建泛型类