Проблема взаимодействия при вызове службы jax-ws со сложным типизированным параметром из .net - поля получены как нулевые сервером - PullRequest
1 голос
/ 01 марта 2010

Я создал веб-сервис в glassfish v3. Метод, который я пытаюсь вызвать из .net с использованием сгенерированного клиента в Visual Studio 2008, принимает один параметр, который в основном представляет собой Java-бин - простые типы (Double, String, Date) как поля с методами получения и установки (на самом деле это сущность EJB). учебный класс). Я обнаружил, что когда я вызываю метод из моего клиента c #, нулевые значения принимаются для параметров Double и Date (но не для String) сервером. Интересно, что у меня также была эта проблема в клиенте, сгенерированном для java net beans, до тех пор, пока я не сделал защищенные поля bean-компонента вместо private в реализации веб-службы, но в случае java все не примитивные типы, включая String, пришли к нулю.

Поскольку java-клиент теперь работает, похоже, проблема в том, как .net сортирует данные. Мне интересно, могу ли я изменить способ, которым сервер генерирует wsdl, используя аннотации на стороне сервера, чтобы .net правильно интерпретировал его, или каким-то образом контролировать, как .net генерирует клиента - используя параметры для инструмента командной строки, а не генерация клиента с использованием Visual Studio, например. Я действительно не хочу создавать клиента вручную.

1 Ответ

1 голос
/ 01 марта 2010

Классы, созданные на стороне .NET, могут включать поле «FooSpecified», используемое для указания, установлено ли свойство / поле «Foo». Это неприятный побочный эффект того, что эти типы (Double, DateTime) обнуляются в SOAP / WebServices / Java, но не обнуляются в .NET. Вместо Nullable для поля, вместо этого может использоваться дополнительное логическое поле, используемое для указания того, указаны ли эти поля или нет. Попробуйте явно установить для этих полей значение true, прежде чем отправлять их на веб-службу.

...