我必须使用 SOAP 调用 Web 服务,而 URL 中恰好有 ^
。 URL 具有以下结构
String url = "http://sampleurl.com?type=entry&version=1.0&Sender.Service=SenderService&Interface=sampleurl/ABC^ServiceRequest";
这给了我以下异常:
com.sun.xml.messaging.saaj.util.JaxmURI$MalformedURIException: Query string contains invalid character:^
11:47:10,670 ERROR [STDERR] at com.sun.xml.messaging.saaj.util.JaxmURI.initializePath(JaxmURI.java:690)
11:47:10,670 ERROR [STDERR] at com.sun.xml.messaging.saaj.util.JaxmURI.initialize(JaxmURI.java:407)
11:47:10,670 ERROR [STDERR] at com.sun.xml.messaging.saaj.util.JaxmURI.<init>(JaxmURI.java:194)
11:47:10,670 ERROR [STDERR] at com.sun.xml.messaging.saaj.util.JaxmURI.<init>(JaxmURI.java:178)
11:47:10,670 ERROR [STDERR] at com.sun.xml.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:254)
令我困惑的是,即使我将 ^
放入 URL 中,使用 SOAP UI 调用 Web 服务也会给我一个正确的答案。
如果我在应用程序或 SOAP UI 中将插入符转义为 %5e
,则 Web 服务会响应 “消息不完整。找不到发件人”
,因此看起来^
必须存在。
知道如何将 ^
放入 URL 中而不引发异常吗?
最佳答案
URL 中不允许使用 ^
字符,可能 SOAPUI 正在为您编码 URL。我认为大小写表示对于 URL 转义字符很重要,请尝试使用大写 %5E
而不是小写 %5e
。
编辑:
我只是尝试在本地主机上配置 TCP 监视器,并从 SOAPUI 向 http://localhost:8091?type=entry&version=1.0&Sender.Service=SenderService&Interface=sampleurl/ABC^ServiceRequest 发出 SOAP 请求
。在 TCP 监视器中,我看到 %5E
而不是 ^
,因此 SOAPUI 似乎正确编码了 URL,您可以在下图中看到这一点:
希望这有帮助,
关于java - 带有字符 ^ 的 SOAP MalformedURLException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24117897/