Java Axis1.4:无法使SOAP请求工作

Java Axis1.4:无法使SOAP请求工作,java,axis,Java,Axis,我真的很难让我的第一个AXIS SOAP客户端工作。我使用的是Axis v1.4 我们的WSDL包含以下内容: .... <element name="GetParameters"> <complexType> <sequence> <element name="param1" type="codeapi:SomeParam"/> <element name="param2" type="unsignedS

我真的很难让我的第一个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>
....
这会导致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());
这不会导致异常,但会将null值返回到allEntries,我不知道是否确实发送了SOAP请求(很可能不是)

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


这里我做错了什么?

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

似乎就是这样。谢谢
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);
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());