2014-01-16 3 views
0

WSDL Я создал клиент WebService с помощью CXF-Codegen Maven плагин, а затем создать экземпляр службы, как это:клиента перерывы CXF WebService при предоставлении

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 
    factory.setEndpointName(SERVICE_NAME); 
    factory.setAddress("some address"); 
    factory.setServiceClass(Service.class); 
    this.port = (Service) factory.create(); 

Это все работает отлично, и я могу позвонить в WebService. Но у меня проблема с этим на Weblogic (XmlSchemaException: Top-level attributes may not have a 'use'), и в качестве возможного решения я пытаюсь предоставить WSDL-файл, чтобы он не был регенерирован. Но когда я добавить WSDL:

factory.setWsdlLocation("service.wsdl"); 

Я получаю это исключение:

org.apache.cxf.service.factory.ServiceConstructionException: Could not find definition for port {namespace}Service. 
    at org.apache.cxf.wsdl11.WSDLServiceFactory.create(WSDLServiceFactory.java:179) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:428) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:548) 
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265) 
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:214) 
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:101) 
    at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:90) 
    at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:155) 
    at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:156) 

я не могу изменять WSDL и я хотел бы знать, как это возможно, что строительство служба не выполняется, если Я предоставляю wsdl, с которого была создана служба.

Я использую CXF 2.6.11

ответ

2

Вам может понадобиться вызов factory.setServiceName (...) там, а также в соответствии с WSDL.

+0

Я не совсем понимаю, что я должен там предоставить (он ожидает QName). Фабрика уже имеет физический адрес веб-службы и конечной точки, ссылаясь на пространство имен и порт. – NeplatnyUdaj

+0

Я удалил '' 'setEndpointName''' и добавил' '' setServiceName''' с тем же QName, и теперь он работает. Благодарю. Я думаю, проблема в моем случае заключается в том, что физический URL-адрес не соответствует пространству имен из wsdl – NeplatnyUdaj

Смежные вопросы