Несоответствия JaxWsDynamicClientFactory.newInstance (). CreateClient () и wsdl2Java - PullRequest
1 голос
/ 06 апреля 2011

Поэтому я пытаюсь использовать JaxWsDynamicClientFactory для динамического создания классов SEI. Выполнение кода ниже

JaxWsDynamicClientFactory def = JaxWsDynamicClientFactory.newInstance();
def.createClient("http://localhost:8080/TheTestService/TestService?wsdl");

генерирует классы:

com.mycompany.project.service.GetProducts

com.mycompany.project.service.GetStatus

работает:

wsdl2Java -d "C/:outputdir" "http://localhost:8080/TheTestService/TestService?wsdl" 

генерирует классы

com.mycompany.project.service.ServiceInterface

com.mycompany.project.service.GetProducts

com.mycompany.project.service.GetStatus

com.mycompany.project.service.impl.ServiceInterface

Кроме того, когда я пытаюсь позвонить

client.invoke("getProducts", 0); 

Я получаю:

org.apache.cxf.common.i18n.UncheckedException: No operation was found with the name {http://impl.service.project.mycompany.com/}getProducts.

, что, я думаю, имеет смысл, так как не будет ничего с именем getProducts, созданного на impl.service.project.mycompany.com. Однако, поскольку я написал веб-сервис, я точно знаю, что интерфейс веб-сервиса имеет метод getProducts (int id).

Что я здесь не так делаю? Согласно документации CXF, фабрика динамических клиентов использует тот же генератор кода, что и инструмент wsdl2Java. Если это так, почему не генерируются одинаковые классы?

Спасибо

Чак

Ответы [ 2 ]

2 голосов
/ 03 декабря 2012

Во-первых, JaxWsProxyFactoryBean для создания клиента это нормально.Я решил проблему, вы должны сохранить свой интерфейс службы и implementor в одном пакете классов.Когда JaxWsDynamicClientFactory используется для динамического создания классов SEI, он находит implementor в том же пути пакета, это настройка по умолчанию.Но в соответствии с API вы можете установить targetNamespace.

Я понятия не имею о различиях между JaxWsProxyFactoryBean и JaxWsDynamicClientFactory.

0 голосов
/ 09 апреля 2012

Я думаю, что есть какая-то ошибка, потому что у меня был .wsdl, и один из классов, сгенерированных с помощью wsdl2java, имел свойство getItem НО JaxWsDynamicClientFactory.newInstance().createClient() сгенерировало этот класс со свойством getItems.Итак, мой прогресс - изучить методы класса, которые вы хотите использовать (я имею в виду методы классов, сгенерированные с помощью JaxWsDynamicClientFactory.newInstance().createClient()). Чтобы добиться этого, используйте ссылку

...