【问题标题】:Calling JAX-WS Web Services on WebSphere v7 with SOAP UI使用 SOAP UI 在 WebSphere v7 上调用 JAX-WS Web 服务
【发布时间】:2013-04-24 00:00:30
【问题描述】:

我有一个打包在 EAR 中的 JAX-WS Web 服务,部署到 WebSphere v7。 EAR 包含:
- APP-INF 目录:类目录(右侧包层次结构中的 .class 文件)加上所需 jar 的 lib 目录
- META-INF 目录
- 与空 WEB-INF 和 META-INF 目录以及 HelloWorld index.html 的战争

我有两个班级:

@WebService
public interface Service {}

和:

@WebService
public class ServiceImpl implements Service {
    @WebMethod
    public String test(String who) {
        return("Hello " + who + "!");
    }
}

(业务逻辑需要lib目录中的jar,我只是将逻辑替换为简单的hello + who)。

我已经在 WAS v7 中部署了 EAR,现在我想使用 SOAP UI 对其进行测试。我已经为以下内容设置了上下文根:
/服务
在部署期间。

在哪里可以找到生成的 WSDL 及其地址/端点是什么?

我对此完全陌生,一个有用的关于 WAS v7 完整教程链接的 JAX-WS 也可以。我找不到任何东西,尽管我已经搜索了几个小时......

【问题讨论】:

    标签: java jax-ws websphere-7


    【解决方案1】:

    当您不直接定义时,默认情况下,JAX-WS 运行时会将后缀Service 添加到实现服务的类中,尽管这不是适用于所有运行时的规则。如果您想获取已部署的 WSDL,请尝试

    http://localhost:9080/service/ServiceImplService?wsdl
    

    或者

    http://localhost:9080/service/ServiceImplService/ServiceImplService.wsdl
    

    如果要更改模式 URL

    @WebService(serviceName = "EchoService")
    public class ServiceImpl implements Service {
        @WebMethod
        public String test(String who) {
            return ("Hello " + who + "!");
        }
    }
    

    试试

    http://localhost:9080/service/EchoService?wsdl
    

    IBM Redbook - Application Server V7.0. Web Services Guide中查看更多信息

    更新

    如果要在WAS中部署EAR,基本结构是:

    TestEAR.ear
    |   TestWeb.war
    |
    \---META-INF
            MANIFEST.MF
    

    WAR 文件进入这个 EAR 的结构是:

    TestWeb.war
    +---META-INF
    |       MANIFEST.MF
    |
    \---WEB-INF
        |   ibm-web-bnd.xml
        |   ibm-web-ext.xml
        |   web.xml
        |
        +---classes
        |   \---org
        |       \---paulvargas
        |           \---test
        |               |   Service.class
        |               |   ServiceImpl.class
        |               |
        |               \---jaxws
        |                       Test.class
        |                       TestResponse.class
        |
        \---lib
    

    文件ibm-web-<i>xxx</i>.xml 是此示例的可选文件。 MANIFEST.MF 只有:

    Manifest-Version: 1.0
    Class-Path: 
    

    Test.classTestResponse.class 文件(用于 WSDL 文档文件中的操作 test)由 wsgen 工具生成,其命令类似于:

    wsgen -cp . org.paulvargas.test.ServiceImpl
    

    web.xml 包含:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <display-name>TestWeb</display-name>
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
            <welcome-file>default.html</welcome-file>
            <welcome-file>default.htm</welcome-file>
            <welcome-file>default.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    

    wsdlLocation 是:

    http://localhost:9080/TestWeb/ServiceImplService/ServiceImplService.wsdl
    

    查看更多:

    【讨论】:

    • 我仍然无法获取 wsdl。
    • 感谢您的回答,但我仍然无法获取 wsdl。我的 webapp 在那里,当在浏览器中输入以 ctxroot 结尾的 url 时,它显示了我欢迎 index.html 的内容。我的耳朵包含:带有清单和战争的元信息。战争包含:meta-inf (+ manifest)、一个 index.html 和一个 WEB-INF。 WEB-INF 包含带有欢迎文件的 web.xml。
    • 还有 classes 目录,在 war 的 web-inf 目录下。在类中:一个 wsdl 和一个 xsd,都由 websphere v7 的 wsGen 工具生成:link 以及 java 包的目录,应该是这样。在带注释的 Service 类的包中,有一个带有 .classes 的 jaxws 目录,也是由 wsgen 工具生成的。这些类与我的 Web 服务的方法(Test.class)同名,响应类也一样,它们很复杂。
    • 如果您使用的是 Rational Application Developer,则不需要使用 wsgen 工具生成工件。只需要在您的课程中添加@WebService 注释。 WAS 自动生成工件。
    • 我只有 Eclipse 和 ant。我在 Eclipse 中添加了一个 Websphere 服务器,但它说:“不支持托管(联合)WebSphere Application Server Network Deployment 环境。”,所以我通过管理控制台部署了由 ant 任务创建的 EAR。
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    相关资源
    最近更新 更多