Ось 1.4: невозможно получить SOAP-запрос на работу - PullRequest
0 голосов
/ 28 мая 2009

Я действительно изо всех сил пытаюсь заставить моего первого клиента 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 (на стороне клиента), даже если все нулевые параметры являются необязательными.

-

Моя вторая попытка:

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.

Что я здесь не так делаю?

1 Ответ

1 голос
/ 28 мая 2009

Очевидно, что если параметр имеет тип держателя (т. Е. Его класс * Держатель), вам нужно создать экземпляр держателя и указать его как значение параметра, даже если этот параметр является необязательным. В противном случае вы получите исключение нулевого указателя в сгенерированном классе-заглушке. Только не кладите ничего в держатель.

...