0

我真的很难让我的第一个 AXIS SOAP 客户端工作。我正在使用 Axis v1.4。

我们的 WSDL 包含以下内容:

....
<element name="GetParameters">
  <complexType>
    <sequence>
      <element name="param1" type="codeapi:SomeParam"/>
      <element name="param2" type="unsignedShort" minOccurs="0"/>
      <element name="param3" type="string" minOccurs="0"/>
      <element name="param4" type="unsignedShort" minOccurs="0"/>
      <element name="param5" type="unsignedShort" minOccurs="0"/>
      <element name="param6" type="string" minOccurs="0"/>
      <element name="param7" type="string" minOccurs="0"/>
      <element name="param8" type="string" minOccurs="0"/>
      <element name="param9" type="codeapi:AnotherParam" minOccurs="0"/>
    </sequence>
  </complexType>
</element>
....

我已经运行 wsdl2java 来生成代码。

--

我正在初始化端口:

SimpleProvider conf = new SimpleProvider(new BasicClientConfig());
conf.setGlobalRequest(new LoggingHandler(LOG, Level.FINE,
    "Request sent:\n"));
conf.setGlobalResponse(new LoggingHandler(LOG, Level.FINE,
    "Response received:\n"));

MyService = new MyServiceLocator(conf);

URL myServiceURL = "http://<removed>";

MyServicePort myServicePort = myService.getMyServiceSOAPPort(myServiceUrl);

--

我第一次尝试访问请求:

SomeParam param1 = new SomeParam();
param1.setParamA("blah"); // this is the only needed parameter

Entry[] allEntries = myServicePort.getParameters(param1, null, null, null, null, null, null, null, null);

这会导致 NullPointerException(在客户端),即使所有 null 参数都是可选的。

--

我的第二次尝试:

SomeParam param1 = new SomeParam();
param1.setParamA("blah");

Entry[] allEntries = myServicePort.listCodes(param1, new UnsignedShort(), new StringHolder(), new UnsignedShort(), new UnsignedShort(), new String(), new String(), new String(), new AnotherParam());

这不会导致任何异常,但会向 allEntries 返回空值,并且我不知道是否实际发送了 SOAP 请求(很可能没有)。

代码在 Oracle AS 之上运行。在任何一种情况下,Axis 都不会将一行调试信息写入日志,即使所有不同的调试类都已在 Oracle 中激活,并且 LoggingHandlers 已初始化。

我在这里做错了什么?

4

1 回答 1

1

显然,如果一个参数是持有者类型的(即它的类是 *Holder),您需要创建一个持有者实例并将其作为参数值,即使该参数是可选的。否则,您将在生成的存根类中获得空指针异常。只是不要在支架内放任何东西。

于 2009-05-28T10:09:13.617 回答