gpt4 book ai didi

web-services - 如何使用 Apache CXF 创建具有基本身份验证的动态 Web 服务客户端?

转载 作者:行者123 更新时间:2023-12-02 02:29:20 25 4
gpt4 key购买 nike

我想使用 TDD 开发 SOAP 网络服务。 Web 服务构建于 Apache CXF 之上,并通过基本身份验证进行保护。我的想法是在动态客户端的帮助下设置单元测试,以避免代理的创建过程。

文档显示了如何创建动态客户端 1 :

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://localhost:8080/OrderProcess?wsdl");
Object order = Thread.currentThread().getContextClassLoader()
.loadClass("demo.order.Order").newInstance();
Method m1 = order.getClass().getMethod("setCustomerID", String.class);
m1.invoke(order, "C001");
Object[] response = client.invoke("processOrder", order);

好的,看起来很有希望。但是如何为基本身份验证指定用户名和密码? WSDL 和服务本身都受到基本身份验证的保护。

再见,
奥拉夫

最佳答案

我看过 Apache CXF 的源代码。我认为当前版本的 CXF (2.3.1) 无法从受基本身份验证保护的 URL 检索 WSDL。通常您以这种方式创建动态客户端:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(
"http://localhost:8080/ws-auth/EchoService?wsdl");

不幸的是,您将得到一个 ServiceConstructionException 作为返回:

org.apache.cxf.service.factory.ServiceConstructionException: 
Could not resolve URL "http://localhost:8080/ws-auth/EchoService?wsdl".
at org.apache.cxf.endpoint.dynamic.DynamicClientFactory.composeUrl(DynamicClientFactory.java:6)
...

我找不到任何地方来设置基本身份验证的凭据。作为解决方法,我可以借助第二个工具(可能是 httpclient)下载 WSDL 并将其存储在临时文件夹中。 CXF 可以使用这个文件,并与客户端的创建一起使用。我试过这种方式,但我没有运气。另一个异常(exception)出现了。这并不奇怪,因为我无法找到如何将凭据移交给动态创建的客户端。 Apache CXF 的文档可能更广泛。

坦率地说,我不再确定 Apache CXF 是否是该任务的最佳选择。有人知道支持以简单方式测试 SOAP web 服务的工具或框架吗?正如我之前提到的,它应该通过解析 WSDL 来动态创建服务代理。也许在 Java 世界之外有可行的解决方案。 Ruby 或 Python 人员如何处理这个问题?也许我可以通过在我的单元测试中使用 JRuby 或 Jython 来采用他们的方法。

关于web-services - 如何使用 Apache CXF 创建具有基本身份验证的动态 Web 服务客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4413087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com