JAX-WS 从 jar 加载 WSDL

2024-03-13

我正在编写一个胖客户端,它使用 SOAP 服务来实现某些功能(错误报告等)

我的 JAX-WS 工作正常,但默认情况下(至少在 netbeans 中)它会在每次初始化服务时从远程服务器获取 WSDL。我希望这有助于提供一些版本控制支持等,但这不是我想要的。

我已经添加了wsdllocationarg 到 wsimport 将生成的类指向本地资源。以下代码片段是从 ApplicationService.java 加载 WSDL 资源的 URL。

baseUrl = net.example.ApplicationService.class.getResource(".");
url = new URL(baseUrl, "service.wsdl");

我很确定指向存储在 net/example/resources 包中的 jar 内的资源应该没有问题,并且 jar 本身是按预期构建的。但是,该服务不会加载...具体来说,当我调用 ApplicationService.getPort(); 时,我收到 NullPointerException;

这可能吗?或者只是徒劳无功?


是的,这绝对是可能的,因为我在通过 javax.xml.ws.EndpointReference(一个 WS-A 相关类)创建客户端时已经这样做了。我已将 WSDL 的类路径引用添加到 WS-A EndPointReference,并且 JAX-WS 的 Metro 实现加载了它。无论是从 WS-A EndPointReference 还是从文件或 http URL 加载 WSDL,您的 JAX-WS 实现都应该使用相同的 WSDL 解析代码,因为您所做的只是解析 URL。

最适合您的方法可能是执行以下操作:

URL wsdlUrl = MyClass.class.getResource(
            "/class/path/to/wsdl/yourWSDL.wsdl");

Service yourService= Service.create(
            wsdlUrl,
            ...);

其中 ... 表示 WSDL 内 WSDL 服务的 QName。现在要记住的重要一点是您的 WSDL 需要完整且有效。这意味着,如果您的 WSDL 导入 XSD 文件或其他 WSDL,则 URL 必须正确。如果您将导入的 WSDL 和 XSD 包含在与 WSDL 文件相同的 JAR 中,则应该使用相对 URL 进行导入,并将所有导入保留在同一个 JAR 文件中。 JAR URL 处理程序不会将相对 URL 视为相对于类路径,而是相对于 JAR 文件内的相对 URL,因此您不能在跨 JAR 运行的 WSDL 中进行导入,除非您实现自定义 URL 处理程序和您自己的前缀基于类路径的导入解析。如果您的 WSDL 导入外部资源,那没问题,但如果这些资源发生移动,您就会面临维护问题。即使使用类路径中的 WSDL 静态副本也违背了 WSDL、Web 服务和 JAX-WS 的精神,但有时这是必要的。

最后,如果您嵌入静态 WSDL,我建议您至少使服务端点可配置以用于测试和部署目的。重新配置 Web 服务客户端端点的代码如下:

  YourClientInterface client = yourService.getPort(
            new QName("...", "..."),
            YourClientInterface.class);
  BindingProvider bp = (BindingProvider) client;
  bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                "http://localhost:8080/yourServiceEndpoint");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAX-WS 从 jar 加载 WSDL 的相关文章

  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 如何在 jax-ws 客户端中隐藏(可能)由 jax-ws 库引起的警告

    我正在使用 netbeans 在我的应用程序中生成 Web 服务客户端 我的程序使用 jax ws 库来设置调用 Web 服务的超时 出现问题是因为每当我启动这个程序时它都会生成很多这样的警告消息 2010 年 12 月 13 日下午 4
  • Oracle Service Bus 中如何使用 WSDL?

    我使用 WSDL 创建了一个 OSB 服务并选择了一个绑定 现在 当我的客户尝试使用我提供的 WSDL 调用服务时 他们会收到错误 另外 我提供的 WSDL 中的绑定名称和他们从 URL 中提取的 WSDL 是不同的 怎么了 根据 OSB
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • JS 中的 .Jar 文件

    有谁知道如何在 JS 中访问 jar 文件 我已经用 Java 创建了类并作为 jar 文件导入 我想从 JS 文件访问该类 大家好 我感谢你们所有人 我尝试在 Firefox XUL 中使用 JS 列出文件夹中的文件 但我做不到 然后我决
  • WSDL 中的数组响应 - SOAP PHP

    在我的 wsdl 代码中 我得到一个整数 我想返回数组中的结果 为什么在我的输入中我只有一个整数 而我需要数组中的结果 因为在我的 php 函数中 我想从客户端选择的整数中的数据库返回信息 例如 我的客户发送1 在我的php中 我从数据库中
  • 为什么我的 Java 路径中添加了“L”?

    我在我的类路径中加载了一个 jar 在 iReport 中 如果重要的话 我确信它具有所需的方法 但是当我尝试测试连接 从而调用该 jar 时 我得到一个 java lang NoSuchMethodError 说它正在引用班上 Lorg
  • 使用 JAX-WS 的 WebLogic 中没有模式导入的单个 WSDL

    如何使用 JAX WS 配置由 WebLogic 10 3 6 生成的 Web 服务 以将对象架构包含在单个 WSDL 文件声明 而不是导入声明 中 示例代码 界面 import javax ejb Local Local public i
  • Java编程编译jar

    我有一个文本文件中的java源代码 必须在源代码中输入一些自定义的硬编码变量 然后将其转换为 jar 这是可行的 但是当我运行 jar 时 找不到 Main 类 当我用 WinRAR 解压 jar 文件时 我似乎找不到错误 当我通过 cmd
  • LocationAwareLogger 上的 SLF4J NoSuchMethodError

    这是一个以前曾被问过的问题 但不幸的是 似乎没有解决方案对我有用 我面临这个异常 带有删节的堆栈跟踪 java lang NoSuchMethodError org slf4j spi LocationAwareLogger log Lor
  • 配置 Eclipse 将 App Engine 类预先捆绑到单个 JAR 中以加快预热速度

    在与另一家同样使用 App Engine 的公司的同事进行讨论后 他告诉我 他通过以下步骤成功地将应用程序预热时间从约 15 秒缩短到约 5 秒 配置 Eclipse 将编译过程中生成的类捆绑到单个 JAR 文件中 配置 Eclipse 以
  • JPA 和数据库位于一个 jar 中

    我创建了一个使用 JPA 和 MySQL 的应用程序 现在我喜欢用它创建简单的桌面应用程序 例如 一个简单的 jar 最好 两个问题 在一个简单的 jar 中获取一个项目 包括它所依赖的所有 jar 的最简单方法是什么 我可以使用像 sql
  • 为什么从 Eclipse 导出的可运行 JAR 不起作用?

    我有一个在 Eclipse 中运行良好的项目 但是 当我将其导出到可运行的 JAR 其中包含依赖项 时 它不会运行 从控制台运行 JAR 时出现的错误是 编辑 之前没有使用 jar 运行它 INFO Loading XML bean def
  • Java,根据 WSDL 中的嵌入模式验证 XML

    我有一个 wsdl具有嵌入架构的文件 我想使用它来验证 XML 文件 字符串 wsdl文件 与验证的方式相同 xsd 该架构位于
  • 如何将未在 WSDL 文件中定义的 SOAP 标头传递到 python SUDS 中

    我的网络上有一个摄像头 我正在尝试使用 suds 连接该摄像头 但 suds 不会发送所需的所有信息 我需要添加 WSDL 文件中未定义的额外肥皂头 以便相机可以理解该消息 所有标头都包含在 SOAP 信封中 然后 suds 命令应位于消息
  • Spring Boot 应用程序的 .jar 无法正常工作(tomcat-embed-jasper 问题)

    我对 Spring boot 和 Maven 相当陌生 我在尝试运行可执行文件 jar 时遇到问题 我的最终目标是创建 jar 的 docker 映像 以便我可以部署我的应用程序 当我执行 mvn clean install 时 我得到了应
  • Web 服务客户端的 AXIS 与 JAX-WS

    我决定用Java 实现Web 服务客户端 我已经在 Eclipse 中生成了 Axis 客户端 并使用 wsimport 生成了 JAS WS 客户端 两种解决方案都有效 现在我必须选择一种来继续 在选择其中之一之前我应该 考虑什么 JAX
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • JAX-WS Soap 错误未出现在 WSDL 中

    我正在使用 JAX WS 创建一个 Web 服务 我正在使用 Java 到 WSDL 方法创建它 我无法让我的例外按照我的要求工作 我创建了以下异常类 WebFault public class MyWebServiceException

随机推荐