JAX-WS:有状态 WS 在独立进程中失败

2024-05-12

我在 Tomcat 上部署了一个有状态的 Web 服务。它由工厂服务和主要 API 服务组成,并且工作得很好。工厂服务将 W3CEndpointReference 返回到主 API 实例,客户端使用会话。

现在,我尝试将相同的服务作为独立应用程序运行。在这种情况下,工厂返回的 W3CEndpointReference 突然开始指向工厂 URI,而不是主服务之一。

当比较 Tomcat 和独立运行的引用时,很明显独立引用具有错误的 URI。具体来说,它指向工厂 URI,而不是主 API。

正确参考如下:

...
<ns3:Address>http://localhost:8080/td2ws/api</ns3:Address> 
...

以下是在独立进程上调用工厂时的参考:

<Address>http://localhost:9009/td2ws/factory</Address>

我的理解是,servlet 上下文下的某些代码了解服务类 (Td2Ws) 与其 URI 之间的对应关系,并相应地调整引用。不过,该代码在独立进程下不起作用。我什至怀疑代码使用了 sun-jaxws.xml,但我不知道如何“打开它”。

如何使独立应用程序中的有状态 Web 服务正常工作?

以下是代码的相关部分:

工厂服务(无状态):

@WebService(targetNamespace="http://server.td2ws.sf.net/") 
public class Td2WsFactory {
    @WebMethod(operationName="StartSession", action="urn:StartSession")
    @WebResult(name="Reference")
    public W3CEndpointReference startSession() {
        StatefulWebServiceManager<Td2Ws> manager = Td2Ws.getManager();

        // for standalone execution only
        if( manager == null ) {
            manager = new StatefulInstanceResolver<Td2Ws>(Td2Ws.class);
            Td2Ws.setManager(manager);
        }

        Td2Ws session = new Td2Ws();
        return manager.export(W3CEndpointReference.class,session);
    }
}

有状态API:

@Stateful
@WebService(targetNamespace="http://server.td2ws.sf.net/") 
@Addressing
public class Td2Ws {
    private static StatefulWebServiceManager<Td2Ws> manager;

    public static void setManager(StatefulWebServiceManager<Td2Ws> manager ) {
        Td2Ws.manager = manager;
    }

    public static StatefulWebServiceManager<Td2Ws> getManager() {
        return Td2Ws.manager;
    }

    @WebMethod(operationName="Login", action="urn:Login")
    public void login(
            @WebParam(name="Username") String username,
            @WebParam(name="Password") String password,
            @WebParam(name="Domain") String domain,
            @WebParam(name="Project") String project
            ) throws Td2WsException {

客户端代码(针对独立):

public static void main(String[] args) throws Exception {
    Endpoint epf = Endpoint.publish("http://localhost:9009/td2ws/factory", new net.sf.td2ws.server.Td2WsFactory());
    Endpoint eps = Endpoint.publish("http://localhost:9009/td2ws/api", new net.sf.td2ws.server.Td2Ws());

    URL factoryUrl = new URL("http://localhost:9009/td2ws/factory?wsdl");
    QName factoryQname = new QName("http://server.td2ws.sf.net/", "Td2WsFactoryService");

    URL sessionUrl = new URL("http://localhost:9009/td2ws/api?wsdl");
    QName sessionQname = new QName("http://server.td2ws.sf.net/", "Td2WsService");

    Td2WsFactory factory = new Td2WsFactoryService(factoryUrl,factoryQname).getTd2WsFactoryPort();
    System.out.println("factory: "+factory);

    W3CEndpointReference session = factory.startSession();
    System.out.println("session: "+session);

    Td2WsService service = new Td2WsService(sessionUrl,sessionQname);
    System.out.println("service: "+service);

    Td2Ws port = service.getPort(session,Td2Ws.class);
    System.out.println("port: "+port);

    port.login(
            Config.get("td.user"), 
            Config.get("td.pass"),
            Config.get("td.domain"),
            Config.get("td.project"));
    System.out.println("logged in...");

该代码在 login() 上失败,因为目标对象没有登录操作(毕竟,它错误地定位到工厂 URI):

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: 
Cannot find dispatch method for {http://server.td2ws.sf.net/}Login

我已经有一段时间没有这样做了,但我看了一下我前一段时间构建的功能性有状态 Web 服务。我的注释与你的非常相似,除了我的注释位于班级顶部:

public class MyService {

  @Resource
  WebServiceContext wsCtx;

  ...

}

请注意,没有修饰符,如果有其他的话,我认为它需要公开,但我并不肯定。容器如何知道如何设置这个让我感到困惑,但它确实有效。它必须只查找 WebServiceContext 类型的任何 @Resource 并设置它。您可以像这样访问会话信息:

HttpServletRequest hRequest =  (HttpServletRequest)ctx.getMessageContext().get(MessageContext.SERVLET_REQUEST);

Session s = hRequest.getSession();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAX-WS:有状态 WS 在独立进程中失败 的相关文章

  • 无法执行目标 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec

    三周前 我完成了一个网络应用程序的工作 一切都运行没有问题 现在 三周后 没有任何更改 我想再次运行该应用程序 但这次我收到以下错误消息 An error occurred while parsing the server response
  • Javadoc 链接到其他类中的方法

    目前我正在使用以下 Javadoc 语法引用其他类中的方法 see link com my package Class method 据我从文档中了解到 这是执行此操作的正确方法 但现在到了有趣的部分 或者说令人沮丧的部分 当我生成这个 j
  • 浏览时 Java Applet 不会被终止

    当用户离开加载小程序的页面时 如何停止 Java 小程序的进程 我正在使用 Chrome 现在要杀死小程序 我必须使用窗口的任务栏并杀死进程 java exe Java applet 具有生命周期方法 那些是init start stop
  • 在 Java 中将字符串复制到文件的开头

    我想将一个字符串写入文件的开头 我该怎么做 我根本不知道如何添加字符串 这就是我到目前为止所做的 public static void prepend String filename String data throws IOExcepti
  • 用于查找附近兴趣点的网络服务?

    我正在寻找一种付费或免费服务 可以返回按类别 例如 餐厅 过滤的给定距离 例如 10 公里 内的兴趣点 Factual http www factual com 看起来很有前途 但不支持我的国家 南非 Google Places API 仍
  • Netbeans 雷达插件配置

    我使用的是 Netbeans 8 0 1 在提交到 SVN 之前 我需要从 IDE 运行并检查 SonarQube 分析 我已经安装了 Netbeans Radar 插件 用于启动本地分析并检查结果 这个插件有一个名为 Get Issues
  • 将 Swing 集成到简单的文本冒险游戏中

    我对 Java 中的一些中级概念相当陌生 最近 我制作了一款名为 DazzleQuest 的文本冒险游戏 它完全在开发者控制台 终端中运行 它涉及到我的朋友作为角色 所以我想向他们展示它 并通过将命令行的功能和控制台的输出转移到一个简单的
  • rmi类找不到异常

    我使用 java rmi 编写了一个简单的项目并导出到可执行 jar 文件 当我尝试运行它时 有时会出现异常 有时会起作用 当我指定 Djava rmi server codebase file serverClasses 时 它似乎没有正
  • Maven 部署:deploy-file 发布所有文件而不是一个

    我正在使用 Maven 构建我的 Java 应用程序Maven 组装插件 https maven apache org plugins maven assembly plugin 创建一个可执行的 jar 因此 目标文件夹包含多个 jar
  • Runtime.getRuntime().exec(cmd) 挂起

    我正在执行一个命令 该命令返回文件的修订号 文件名 但如果执行命令时出现问题 应用程序就会挂起 我可以做什么来避免这种情况 请在下面找到我的代码 String cmd cmd C si viewhistory fields revision
  • 无法从 PDFA1-a 格式文档中提取图像

    我正在使用以下代码从 PDFA1 a 格式的 pdf 中提取图像 但我无法获取图像 List
  • GSSAPI 中的 javax.naming.AuthenticationException

    我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定 我收到此错误 javax naming AuthenticationException GSSAPI 根异常是 javax security sasl SaslException
  • CXF 增加连接池大小而不更改 http.maxConnections

    最近我被要求将 CXF 配置为与我们旧的 XFire 服务相同的参数 这些参数之一是Keep Alive timeout 60 max 20 然而 我做了一些研究 看来 CXF 使用 JVMHttpURLConnection引擎盖下的对象
  • Android Studio错误的含义:未注释的参数覆盖@NonNull参数

    我正在尝试 Android Studio 创建新项目并添加默认值后onSaveInstanceState方法创建 MyActivity 类 当我尝试将代码提交到 Git 时 我收到一个我不明白的奇怪错误 代码是这样的 我得到的错误是这样的
  • 避免加密和编码的 URL 字符串中的换行符

    我正在尝试实现一个简单的字符串编码器来混淆 URL 字符串的某些部分 以防止它们被用户弄乱 我使用的代码几乎与示例中的相同JCA指南 http docs oracle com javase 6 docs technotes guides s
  • 如何在 Windows 上使用 Java Hotspot JVM 禁用小型转储 (mdmp) 文件生成

    目前 我有一个已部署的可执行 jar 文件 该文件在崩溃时会创建大型 7 Gb 小型转储文件 我想要一个导致崩溃原因的文本表示 而不是 JVM 状态的二进制文件 我尝试使用中找到的信息这个 CodeRanch 帖子 http www cod
  • 如何在不下载子项的情况下从 Firebase 获取子项密钥?

    我有一个 Firebase 数据库 其中的节点 items 有很多子项 我想导入子项键的列表 由于每个子项都包含相当多我对此不感兴趣的数据 因此我想仅下载子项密钥 以最大程度地减少传输的数据量 为了便于说明 假设我有以下数据结构 然后我想获
  • Java Media API:java media api 下载

    我在哪里可以找到javax media jar 文件 在sun站点它下载一个安装程序 有没有可用的java媒体jar 没有 javax media 具体是 jar 文件 该包位于 jmf jar 文件中 您需要运行安装程序并取出 jar 或
  • 在android中测量不规则多边形的面积

    我正在开发一个应用程序 在其中我在地图上绘制多边形 并且我使用的地图不是谷歌 它的Mapsforge开源离线地图库 我可以通过将地理点转换为像素点来轻松在地图上绘制多边形 但在这里我想发现是不规则的多边形 为此我做了很多尝试 但它让我失败了
  • Cassandra 会话与集群 有什么可分享的?

    考虑 Cassandra 的 Session 和 Cluster 类 Java 驱动程序 我想知道有什么区别 在 Hibernate 中 每次都会创建一个会话并共享会话工厂 从许多来源我了解到 它被认为是创建一个会话并在多个线程之间共享它

随机推荐

  • 在 d3 中应用转换时出现错误

    我正在尝试对我在 d3 中设计的条形图应用一些过渡效果 这是我的代码 svg selectAll bar data data enter append g attr class bar append rect attr rx barRadi
  • org.postgresql.util.PSQLException:协议错误。会话设置失败

    我知道这些类型的问题已经存在 但提供的解决方案对我不起作用 在我的应用程序中 没有版本不匹配的黑白驱动程序和 PostgreSQL 服务器 我还没有找到任何其他解决方案 我正在使用 PostgreSQL 服务器 9 4 和 postgres
  • 解锁 Jenkins - 如何

    我已经使用 putty 从 Windows 系统在我的 ec2 实例上安装了 jenkins 当我尝试通过网络访问 jenkins 时 我使用 var lib jenkins secrets initialAdminPassword 解锁
  • Python 有不可变列表吗?

    python 有不可变列表吗 假设我希望具有元素有序集合的功能 但又想保证它不会改变 如何实现呢 列表是有序的 但它们可以改变 是的 它被称为一个tuple 所以 而不是 1 2 这是一个list并且可以突变 1 2 is a tuple并
  • 空 EntityManager/EJB 注入 MDB

    我有一个消息驱动 bean MDB 部署到 WebLogic 12 1 3 我尝试使用 PersistenceContext 注释将实体管理器注入 MDB 但实体管理器为空 我还尝试注入一个简单的无状态会话 bean 它也是空的 但是 Me
  • Express+jade:局部变量在视图中不可用

    我遇到了一个非常基本的问题 但我似乎找不到答案 我正在与node js express我只是想将局部变量传递到视图中 如下所示 app get function req res res render index locals title B
  • _mysql_connector.MySQLInterfaceError:命令不同步;您现在无法运行此命令 python msql.connector

    我有一个功能 您可以在下面看到 如果运行此函数 我将收到您在标题中看到的错误 您能帮助我吗 不久前我能够用锁解决这个问题 但现在它们不起作用 我知道这与我的连接有关 但我不知道如何解决这个问题 def insertNewValues sel
  • ECMAScript 6 类中的 getter 和 setter 有何用途?

    我对 ECMAScript 6 类中 getter 和 setter 的意义感到困惑 什么目的 下面是我参考的一个例子 class Employee constructor name this name name doWork return
  • Google 地图第二次无法加载 - AngularJS

    我正在使用 GoogleMap API angular google maps js 包 并且我有一个非常奇怪的行为 The first time I load it i get the full map loaded like here
  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • Excel - 查找列中不是错误或空白的最后一个值

    我需要在 Excel 电子表格的一列中找到最后一个非错误 非空白值 该列可以有多个 N A 实例 它们与实际值交替 有多种解决方案可用于查找最后一个非空单元格 但这些解决方案不考虑错误 特别是如果最后一个非空单元格出现错误 在这种情况下 解
  • Sequelize 关联 - 请改用 Promise 风格

    我正在尝试将 3 张桌子连接在一起Products Suppliers and Categories然后排SupplierID 13 我读过了如何在sequelize中实现多对多关联 https stackoverflow com a 25
  • Python正则表达式替换除特定单词之外的所有内容

    我正在尝试执行以下操作用正则表达式 import re x re compile going you words to replace s I am going home now thank you string to modify pri
  • 受 Azure AD B2C 保护的自动化端点测试

    我有一个 WebAPI 应用程序 它使用用户通过凭据登录获得的 Azure B2C 令牌对用户进行身份验证 我现在需要针对我的 WebAPI 编写一些测试 但考虑到我需要登录 我不确定如何自动获取令牌https login microsof
  • 使用 ffmpeg 或 OpenCV 处理原始图像

    看完之后维基百科页面 http en wikipedia org wiki Raw image format原始图像格式 是任何图像的数字负片 为了查看或打印 相机图像传感器的输出具有 进行处理 即转换为照片渲染 场景 然后以标准光栅图形格
  • 如果按下 Esc 则中断循环

    我用 JAVA 语言编写了一个程序 它使用 Scanner 类接受来自控制台的输入 现在我想将此功能添加到我的代码中 以便在用户按下 Esc 按钮时存在循环 while 到目前为止 我认为键盘类可以帮助我 但它就像扫描仪一样 我尝试使用事件
  • Google Kubernetes Engine 中的存储 ReadWriteMany

    有没有一种方法能够提供 ReadWriteMany 存储而无需实现存储集群 我能够使用 gcsfuse 提供存储 但速度非常慢 我需要接近 GlusterFS 速度的东西 我目前正在使用 GlusterFS 另一种选择 Google Clo
  • 如何从新类末尾删除空行 - Eclipse

    我目前在 Eclipse Juno 4 2 上工作 但问题也与旧版本的 eclipse 有关 我发现了一个令人恼火的问题 当我们尝试使用默认格式化程序设置创建新类时 Eclipse 在文件末尾放置一个空行 我试图自己弄清楚如何删除这个恼人的
  • Spyder 和 Jupyter 有什么区别?

    我正在学习Python用于数据科学 但我的问题是我仍然不明白Spyder和Jupyter之间的区别 我希望你们能帮助我理解其中的区别 我将不胜感激 以下只是这两个工具的基本摘要 Jupyter 是一个非常流行的用于数据分析的应用程序 它是一
  • JAX-WS:有状态 WS 在独立进程中失败

    我在 Tomcat 上部署了一个有状态的 Web 服务 它由工厂服务和主要 API 服务组成 并且工作得很好 工厂服务将 W3CEndpointReference 返回到主 API 实例 客户端使用会话 现在 我尝试将相同的服务作为独立应用