问题标签 [saaj]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
724 浏览

java - java.util.logging、ResourceBundles、SAAJ:加载 Glassfish OSGi webapp 包时出现异常

以下异常使我失去了理智:

当我尝试将 WAB(Web 应用程序 OSGi 包)部署到 Glassfish(3.1.1)时,就会发生这种情况。

我正在尝试通过将字符串放入文件中来使用最新版本的 SAAJ ( com.sun.xml.messaging.saaj...) 而不是旧的 JDK 版本(即 JDK版本) 。com.sun.xml.internal.saaj...com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1ImplMETA-INF/services/javax.xml.soap.MessageFactory

似乎在 OSGi 类加载开始之前正在进行一些日志记录,因此在初始化(SAAJ 的实现)ResourceBundle的静态log字段期间返回了“错误” 。com.sun.xml.messaging.saaj.soap.MessageFactoryImpljavax.xml.soap.MessageFactory

有人看过这个/提供的任何解决方法吗?

0 投票
1 回答
7945 浏览

soap - WebLogic使用什么SAAJ包

我遇到了很多问题,因为 SOAP 类有不同的 SAAJ 包:

  • com/sun/xml/internal/messaging/saaj/soap/ 在 rt.jar
  • com/sun/xml/messaging/saaj/soap/ 在 saaj-impl.jar 中

当 WebLogic 使用来自 的类com/sun/xml/internal/messaging/saaj/soap/并使用来自 的类创建应用程序时com/sun/xml/messaging/saaj/soap/,它会在部署应用程序时引发如下异常:

com.sun.xml.internal.messaging.saaj.soap.LocalStrings != com.sun.xml.messaging.saaj.soap.LocalStrings

或者

java.lang.NoClassDefFoundError: com/sun/xml/internal/messaging/saaj/soap/SAAJMetaFactoryImpl

我的解决方案是创建一个带有 saaj 引用的 weblogic.xml 描述符,并将 saaj-impl.jar 包含到战争中。问题是:我能知道 WebLogic Server 中使用的是什么 SAAJ 包吗?

0 投票
1 回答
1898 浏览

java - Java SOAP 请求作为 Web 服务?

因此,为了给您一些背景知识,我正在尝试创建一个将通过 SOAP 与第三方交互的客户端。最初我开始使用 javax.xml.soap SAAJ 推出它,但后来意识到在创建 SOAPConnection 时没有超时选项。

我认为 AXIS 确实有超时,但已被警告尝试避免,这不是很好的性能。我的上级似乎将此作为最后的恢复。

有些人建议 javax.xml.ws Web 服务路由很有效,因为您可以将超时设置放入上下文属性中,前提是它是一个 Web 服务。

所以情况就是这样,我向其发送请求的第三方实际上并没有 WSDL 文件或 URL,最初的想法是构建 SOAP 请求并发送它,如果 SAAJ 有超时设置会很好用.

所以我在思考并原谅我的无知,我是否可以像 Web 服务一样建模和实现通信,而不是构建请求的 SAAJ javax.xml.soap 方法?如果是这样,任何人都可以真正指出我吗?我发现的大多数文档似乎都依赖于从 WSDL 生成存根和类。

这完全是为了设置与此第三方 SOAP API 的连接的超时设置。

另请注意,我看到有些人建议尝试将其视为可以设置超时的 HttpConnection,但我发现它的缺点是它不再返回 SOAPMessage 类型的对象。

所以基本上我试图改变这一点:

进入更像网络服务的东西,所以我可以这样做:

我真的缺乏关于 javax.ws 框架的知识,所以请轻描淡写:)

0 投票
2 回答
3715 浏览

java - 将 SOAP 消息从 Java7 上的 Spring-WS 客户端发送到 Java 6 上的服务器时删除了左尖括号

这对我来说真的很令人沮丧,所以我会尝试解释我现在知道的和不知道的。请确保在帖子底部看到我的更新。

首先,我们有一个使用 Spring-WS 处理消息的战争。我们还有一个使用 WebServiceTemplate 发送消息的客户端。我们部署在 Tomcat 7 上。

在我们当前的开发环境中,Tomcat 7 服务器使用的是 JRE 6u24。在本地,当我使用客户端发送 SOAP 消息时,我正在运行相同的版本。一切都按预期工作。

当我制作本地 JRE 7u04 时,我收到 500 响应并且服务器看到以下错误:

我经历了很多潜在的问题。但是,我认为我在某些方面已将其缩小为 SAAJ 问题。

在 Spring-WS 的 SaajSoapMessageFactory 类中,有一个方法以:

当我使用带有 JRE 6 的客户端发送时,createMessage 调用之后的 inputStream 开始如下:

转换为:<env:Envelope...等

但是,当我使用带有 JRE 7 的客户端发送时,createMessage 调用之后的 inputStream 开始如下:

如您所见,第一个字节,即左尖括号已丢失。我一直在尝试对其进行调试,但我缺乏 com.sun.xml.internal 资源来真正做很多有效的事情。

另外值得注意的是,在 JRE 6 中,调用 checkForUtf8ByteOrderMark 之后的 PushbackInputStream 实际上看起来像最终的字节数组:

[60, 101, 110, 118, 58, 69, 110, 118, 101, 108, 111, 112, 101, 32, 120, 109, 108, 110, 115, 58, 101, 110, 118, 61, 34, 104, 116,ETC

但是当使用 JRE 7 发送时,它看起来像这样:

[60, 0, 0, 0, 0, 0, 0, 0, 0, ETC

现在,该方法本身似乎遵循相同的流程,验证没有 BOM,然后放回它取出的内容以验证它(至少在我看来是这样)。

所以,我有两个问题:

1)有人知道发生了什么吗?这里有什么东西在敲钟吗?

2) 我怎样才能获得这些 com.sun.xml.internal 包的来源?

我应该注意,我可以在 Eclipse 中的 Tomcat 上本地运行它,而且似乎没有任何问题,但我知道那里可能正在进行一些时髦的类加载。

更新1:

我能够将一些源代码与代码相关联,并在 SOAPPart1_2Impl 中使用此方法:

现在,它采用设置 InputStream 的第一个路径。非常有趣的是,完成此操作后,source 会有一个 ByteInputStream 开头:

[60, 0, 0, 101, 110, 118, 58, 69, 110, 118, 101, 108, 111, 112, 101, 32, 120, 109, 108, 110, 115, 58, 101,ETC

我对此感到非常困惑。我将尝试弄清楚这三个字符到底发生了什么——也许 checkForUtf8ByteOrderMark 方法有一些副作用。

更新 2:

好吧,现在我真的到了某个地方。我查看了那个 JAXMStreamSource 类,它导致了一个 ByteOutputStream 类,它有一个方法:

在行“int sz = in.read(buf,count,cap);” 是添加 60 之后的两个零的位置。我仍在试图弄清楚为什么以及为什么使用 1.7 的客户端可能会产生这种效果。

0 投票
3 回答
3588 浏览

java - Java 应用程序中的 SOAP 调用

我正在尝试将 SOAP 调用集成到我的 Java 应用程序中。我已经在线学习了各种教程,但是当我运行应用程序时,它会给出错误,sm.saveChanges()如果该行被注释掉,它会给出错误sm.writeTo(System.out)

下面是代码:

相应的错误是:

有什么建议么?

0 投票
1 回答
6009 浏览

java - 使用 Java Generic SOAPClient (SAAJ) 时抛出异常?

我正在尝试使用以下 SOAPClient for Java(我从以下教程http://users.skynet.be/pascalbotte/rcx-ws-doc/saajpost.htm获得的详细信息)。

但是,它似乎引发了异常。

这是我的代码:

在此示例中,我们假设samples/input1.xml拥有以下内容:

我正在尝试使用的示例网络服务可以在这里找到: http ://www.service-repository.com/client/operations

运行上述 Java 代码(使用 SOAPClient 库)时,会引发以下异常:

使用此网站,服务似乎已启动并运行,并且运行良好。

我什至通过执行一个简单的 cURL 请求验证了服务端点是活动的,这令人惊讶地产生了正确的输出。

产生的输出是:

所以,我的问题是:首先,Java 代码有什么问题?它怎么能被修复?或者,还有其他更好/更可靠的通用 SOAPClient 库可以推荐吗?

0 投票
1 回答
876 浏览

java - 使用 SAAJ 进行 Java SOAP 调用的 Blowfish 加密

我们使用标准 Java/SAAJ 功能来创建 SOAP 消息并执行 Web 服务 (WS) 调用。到目前为止,跨 HTTP 传输的通信未加密,并且使用这种方法在端点上调用 WS 可以正常工作:

现在我们的客户希望我们使用 Blowfish 加密所有流量。我知道我可以使用以下简单方法加密任意数据(此示例仅使用随机密钥):

但是,缺少的链接是:如何将这两个部分放在一起,以便我可以使用 Blowfish 加密有效负载并在收到响应后对其进行解密?

Java 提供的标准工具(SOAPMessageSOAPConnection)似乎根本不支持任何加密。我已经看到 SpringWebServiceTemplate支持的ClientInterceptor实例可能对此有所帮助。但是,我将不得不重写我们的 WS 代码以使用 spring-ws。而且我还没有在他们的参考文档中找到解释如何使用 spring-ws 进行这种加密的示例。

我错过了一些加密通信的简单方法吗?如果是,那是什么?如果没有,有哪些好的选择可以实现客户的要求?

更新:使用 HTTPS 作为安全传输不是一种选择。

非常感谢你的帮助。

0 投票
0 回答
7594 浏览

java - Get elements of SOAP response

When I send a SOAP request using SAAJ API, I would receive a large SOAP response, in which I need to search for some nodes.

I am using following code but it just show the name of first node of body (HotelListResponse which has many children) and I have noticed that the loop just iterates once, (as shown in commented section).

In short: I need to know how to search for some nodes (preferably by their name) in a variable which its type is SOAPMessage. Thanks

0 投票
1 回答
438 浏览

weblogic-10.x - Weblogic 10.3.5 上的 SpringWS2 和 JDOM2 Webservice - 请求元素文本未绑定

在 Weblogic 10.3.5 服务器上部署我的 Spring WS 2 Web 服务(使用 JDOM2 元素作为参数)后,根元素的子元素(这是我的端点函数的主要参数)从不包含文本内容。

例子:

请求 XML(发送时)

请求 JDOM2 元素结构(如函数中所示)

这在 junit 和 glassfish 服务器上运行良好。weblogic 还没有特殊的配置。

我怀疑某些 weblogic 库可能会覆盖 JDOM2 实现,但如果您有类似的经历,我将非常感谢您提供一些意见。

更新

在调试 jdom2 实现时,我发现该文本以“weblogic.xml.saaj.TextImpl”的形式进入 DOMBuilder。JDom 无法提取文本。

也许有人提示如何防止 weblogic 库搞乱应用程序......?

(也感谢您的评论)

0 投票
0 回答
1107 浏览

web-services - 部署调用另一个 Web 服务并使用 xml 签名的 Web 服务

我的目标是制作一个使用 Soap (SAAJ) 调用另一个 Web 服务的 Web 服务。用户调用我的 Web 服务并发送我签名的 XML 文件(字符串),然后发送到目标 Web 服务。目标 Web 服务回复带有签名的 XML,我必须在我的 Web 服务中验证其签名,如果一切正常,则将该回复发送回我的用户。目标 Web 服务还要求我使用 HTTPS/单向 ssl 握手。

以下是我编写的代码,当我将其作为常规程序进行测试时,一切正常。之后,我做了一些细微的更改,并尝试使用 Eclipse 和本地 Tomcat 服务器将其作为 Web 服务进行测试,它也可以正常工作——我可以使用 WSDL 调用方法并得到预期的结果。这就是问题所在 - 我必须在独立的 Weblogic (10.3.6) 服务器上部署我的 Web 服务,但它不再工作了。我遵循了在 JDeveloper 中创建 Web 服务的教程,并将其部署到(集成和独立)服务器,但方法调用无法正常工作。我怀疑问题出在 Weblogic 安全性和它使用证书的方式上,我已将必须用于 ssl 握手的密钥库添加到 Weblogic 密钥库配置中,但它没有帮助。

这是我在调用 testResponse 方法时遇到的错误:

在我将密钥库添加到 Weblogic 密钥库配置错误消息后更改为:

调用 getData 方法时收到以下错误消息:

我已经阅读了一些有关 Web 服务和安全性的 Weblogic 文档,但似乎我看不到树木的木材。如果有人能给我一些指示,我将不胜感激。另外,作为最后的手段,如果我使用 Axis2 重写代码会有帮助吗?这样的 Web 服务能否成功部署到 Weblogic?