【问题标题】:JBoss WS Temp file saved incorrectlyJBoss WS 临时文件保存不正确
【发布时间】:2012-02-07 08:25:03
【问题描述】:

我的problem from yesterday 说已排序。不过没解决。

我的 NPE 是由一个隐藏的 FileNotFoundException 触发的,直到我切换到 TRACE 日志记录 (org.jboss.util.xml.JBossEntityResolver)...

所以事情是这样的:
1.) 我正在尝试从部署到 JBoss
下的代码连接到 Web 服务 2.) JBossWs 将 wsdl 保存到 tmp 文件夹,如下所示:

file:/home/xxx/dev/XXXX/jboss-4.2.3.GA/server/yyy/tmp/jbossws/JBossWS_www.company.xx_99_server_soap.php?wsdl=get8489235369016302536.xsd

3.) 然后当它尝试回读 WSDL 时:

TRACE [org.jboss.util.xml.JBossEntityResolver] Failed to obtain URL.InputStream from systemId: file:/home/xxx/dev/xxx-PAN/jboss-4.2.3.GA/server/xxxxxxx/tmp/jbossws/JBossWS_www.comany.xx_99_server_soap.php?wsdl=get8489235369016302536.xsd
java.io.FileNotFoundException: /home/xxx/dev/xxx-PAN/jboss-4.2.3.GA/server/xxxxxxx/tmp/jbossws/JBossWS_www.comany.xx_99_server_soap.php

显然它会被截断,然后无法回读。

我想我能够以某种方式配置模式如何将其写入磁盘或如何读取它,但我确实找到了解决方案(即使不是来自我提到的 JBoss 类的代码)。任何想法将不胜感激。

编辑:

我在 Linux 服务器上创建了一个简单的测试应用程序,指向包含以下代码的同一文件:

URL url = new URL("file:/home/abos/xxx/xxxx/jboss-4.2.3.GA/server/xxxxxxx/tmp/jbossws/JBossWS_www.company.xx_99_server_soap.php?wsdl=get8489235369016302536.xsd");
    url.openStream();

Exception in thread "main" java.io.FileNotFoundException: /home/xxx/dev/xxxx/jboss-4.2.3.GA/server/anchorage/tmp/jbossws/JBossWS_www.bdmglobal.xx_99_server_soap.php (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:120)
    at java.io.FileInputStream.<init>(FileInputStream.java:79)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)
    at java.net.URL.openStream(URL.java:1010)
    at Main.main(Main.java:11)

以下是我的结论:
1.) 实际上是 URL 类截断了名称
2.) 但如果保存得当,就没有问题了。

所以我仍在寻找一种方法来配置它。

【问题讨论】:

标签: java web-services jboss jbossws


【解决方案1】:

从未见过这个问题,所以我的回答可能对你没有多大帮助...... 您是否尝试将 jboss.server.temp.dir 属性设置为 /tmp 并再次运行您的测试用例?可能有一些硬编码的长度,尝试缩短路径可能会解决问题...... 另一个技巧是设置一个 .sar Jboss 服务来请求您的 wsdl 并通过 JNDI 发布它们,以避免从客户端的角度来看路径 f 的所有问题?您只需处理一个流并将其放入 JNDI 树中..不涉及路径

如果您的问题发生在 JBoss 保存文件时,那么不保存它会解决您的问题,不是吗?这就是为什么我建议将 wsdl 作为流(或根据您的喜好使用 Reader 或 InputStream 的文本)并将其直接放入您的 JNDI 树中的原因。 高温高压 杰罗姆

【讨论】:

  • 您好,非常感谢您的回答。所以我只是试图通过临时文件夹更改来解决它。那里没有运气,至少我也学会了调整它。谢谢。
  • 我现在将尝试看看我是否可以实施您的第二个建议。我不确定我是否了解大局,所以让我看看我是否可以做到这一点:)
  • 嗨,大局是设置一个 Jboss 服务(部署为 .sar),将您的 wsdl 直接作为流抓取,并使用您选择的命名约定将这些流放入 JNDI 树中......为您的客户找到它们很容易,只需一个标准的 JNDI 调用(具有所有 Jboss 标准属性)......它应该可以工作......
  • 哇。现在我懂了。谢谢,我会在下午尝试实施并恢复。
  • 我想我也被卡住了。原因是,无论我如何配置服务客户端存根(给它 wsdl 和服务的 QName 或只给它 wsdl 以便生成的服务包含 url),它都没有问题。当 JBossWS 将服务合同保存到一个文件并尝试将其读回时,就会出现问题。只有当 WS 实现试图建立连接时才会发生这种情况。所以我认为即使 WSDL 将从 JNDI 中检索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2020-07-29
相关资源
最近更新 更多