我真的很难让我的第一个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());
这没有异常,但null值返回allEntries,我不知道是否实际发送了SOAP请求(很可能不是)。
代码在Oracle AS之上运行。在任何一种情况下,Axis都不会将一行调试信息写入日志,即使已在Oracle中激活了所有不同的调试类,并且已初始化LoggingHandler。
我在这里做错了什么?
答案 0 :(得分:1)
显然,如果参数是持有者类型(即其类是* Holder),则需要创建持有者实例并将其作为参数值提供,即使该参数是可选的。否则,您将在生成的存根类中获得空指针异常。只是不要在支架内放任何东西。