【问题标题】:CXF jaxws endpoint relative publish addressCXF jaxws 端点相对发布地址
【发布时间】:2011-10-27 14:20:23
【问题描述】:

尝试在我的 CXF Web 服务端点配置中使用相对发布地址时遇到很多困难。

我有一个简单的 Java 优先 JAX-WS 项目,其中包含以下配置文件:

applicationContent-cxf.xml:

<beans xmlns=...>
    ...
    <jaxws:endpoint
        id="helloWorldService"
        implementorClass="org.helloworld.ws.HelloWorldServiceImpl"
        implementor="#helloWorldServiceImpl" <!-- spring managed -->
        endpointName="sayHello"
        address="HelloWorldService"/>
</beans>

web.xml:

<web-app>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            WEB-INF/applicationContext.xml
            WEB-INF/applicationContext-cxf.xml
        </param-value>
    </context-param>

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <servlet>
        <servlet-name>HelloWorldServlet</servlet-name>
        <display-name>Hello World Servlet</display-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloWorldServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
</web-app>

根据http://cxf.apache.org/docs/servlet-transport.html,看来我应该能够指定HelloWorldService 的发布地址,并且服务的URL 将解析为(例如)http://localhost:8080/services/HelloWorldService。但是当我尝试转到http://localhost:8080/services/HelloWorldService?wsdl 时,我得到一个 404。如果我将我的 jaxws 端点中的发布地址更改为绝对 URL http://localhost:8080/services/HelloWorldService,我就可以访问 wsdl。

如果可能,我想指定一个相对端点地址。我是使用 CXF(和编写 Web 服务)的新手,因此非常感谢任何帮助!

更新 1:

请注意,我正在将我的 Web 服务部署到 Tomcat 7。我不知道它在记录什么,但我的启动日志中的一行显示 Setting the server's publish address to be HelloWorldService。如果有人需要更多信息来帮助我,请告诉我。

更新 2:

CXF 似乎检测到 CXFServlet 是否“正在使用”,如果没有,则使用嵌入式码头实例。 http://cxf.apache.org/docs/xfire-migration-guide.html#XFireMigrationGuide-HTTPandServletSetup。因此,出于某种原因,CXF 使用嵌入式码头实例而不是我的 servlet。但是,我不知道除了 web.xml 中的 HelloWorldServlet 之外还需要什么配置,而且 CXF 文档对我没有进一步的帮助。

【问题讨论】:

    标签: web-services spring jax-ws cxf


    【解决方案1】:

    不应该

    address="/HelloWorldService"
    

    ?

    【讨论】:

    • 感谢您指出这一点。我确实尝试过 /HelloWorldService,但它似乎仍然不起作用。
    • 请在您的端点中添加 serviceName="service'sName" 并尝试
    • 谢谢。我没有提到我在 Web 服务实现的 JaxWS 注释中配置了服务名称。
    • serviceName=HelloWorldService 对我不起作用,此外它还需要在 HelloWorldService 之前使用大括号命名空间
    【解决方案2】:

    答案当然很简单(即简单的敲打桌面)。在我的 cxf bean 定义中,我没有导入“cxf-servlet.xml”文件,如此处http://cxf.apache.org/docs/servlet-transport.html 所示。如果这个文件没有被导入,cxf 假定它应该使用嵌入的 jetty 实例而不是我的 CXF servlet。我的猜测是码头实例仅适用于指定绝对发布地址的端点。

    【讨论】:

    • 感谢您发布解决方案,我遇到了完全相同的问题,差点撞到桌子上 :-)
    猜你喜欢
    • 2011-12-18
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多