0

我正在尝试从 WSDL 生成客户端代码。我需要在 Jdeveloper 10g IDE 上工作。我使用内置工具 Oracle JAX-WS 2.1.5 从 WSDL 生成客户端代码。

对于特定的 WSDL,该工具生成了大约 122 个不包括该类的 JavaLocator类。在运行代码时,我得到一个类未找到WebServiceLocator类的异常。

但是,当我使用 Apache Axis 1.4 ( Eclipse IDE ) 时,它会生成 63 个 java 类并且它还包含WebServiceLocator该类,但这并没有生成身份验证所需的所有方法,尽管 Oracle JAX-WS 2.1。 5. 正在生成这些方法。

我尝试将 Eclipse 生成的 java 类合并到 Jdeveloper 中,但是我收到了很多与方法签名相关的错误。

为什么这两个不同的工具生成不同的客户端代码,并且没有一个完整的,有什么特别的原因吗?

4

1 回答 1

0

这可能有点晚了,但是对于遇到相同问题的人来说,这可能会有所帮助。如果您真的想使用 Axis 1.x 身份验证,请在您的客户端类上完成,如下所示:

MyLocator bindingService = new MyLocator();
bindingService .setPortEndPointAddress(myEndpoint);
MyPort port= bindingService.getMyPort();
((Stub)port)._setProperty(Stub.USERNAME_PROPERTY, myUsername);
((Stub)port)._setProperty(Stub.PASSWORD_PROPERTY, mPassword);
//Perform your query here

我个人会使用 JAX-WS。使用 wsimport 生成存根(SOAPUI 有一个很好的插件来简化它)。对于 JAX-WS 客户端上的身份验证,最简单的方法是将 wsdl 保存在本地并将其作为 jar 的一部分导出,然后将其加载到客户端中。这首先消除了访问 wsdl 所需的 HTTP 授权需求。

URL myWsdlUrl = getClass().getClassLoader().getResource("wsdl/myWsdlFile.wsdl");
MyService service = new MyService(myWsdlUrl , new QName("uri", "localpart"));
myPort port= service .getPort();
BindingProvider bp= ((BindingProvider)vPort);
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, myEndPoint);
bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, myUsername);
bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, myPassword);
//Perform query here
于 2014-09-16T16:00:31.460 回答