2013-07-16 1 views
1

WSO2 WS-Discovery ИнтеграцияWSO2: интеграция WS-Discovery

Мы пытаемся интегрировать WS-Discovery с реестра на продукты Углерод WSO2 управления и WSO2 ESB, имеющий Apache CXF Web Service стек настроен с помощью Spring работает на Tomcat отправляет приветственные сообщения в Прокси-сервер обнаружения (localhost: 9443/services/DiscoveryProxy) на WSO2 Greg.

Поэтому мы добавили cxf-services-ws-discovery-service.jar и cxf-services-ws-discovery-api.jar в classpath в Tomcat. Далее мы устанавливаем свойство spring bus property org.apache.cxf.service.ws-discovery.address на URL-адрес прокси-сервера WS-Discovery на WSO2 Greg для запуска WS-Discovery в управляемом режиме. Выполнив Tomcat и WSO2 Greg сообщений об ошибке регистрируется в wso2Carbon.log (WSO2 Greg) ...

TID: [0] [Greg] [2013-07-15 11:45:03,411] INFO {org.wso2.carbon.discovery.proxy.DiscoveryProxy} - Service Discovery Failed. Retrying after 10s. {org.wso2.carbon.discovery.proxy.DiscoveryProxy} 
TID: [0] [Greg] [2013-07-15 11:45:03,458] ERROR {org.wso2.carbon.governance.api.common.GovernanceArtifactManager} - Failed to add artifact: artifact id: urn:uuid:003aa9d9-2c9f-4e0b-8415-c99632226ee3, path: /trunk/services/org/oasis_open/docs/ws_dd/ns/discovery/_2009/_01/DiscoveredService_1373881503442. An exception occurred while executing handler chain. String index out of range: -1 {org.wso2.carbon.governance.api.common.GovernanceArtifactManager} 
org.wso2.carbon.registry.core.exceptions.RegistryException: An exception occurred while executing handler chain. String index out of range: -1 
       at org.wso2.carbon.registry.core.jdbc.handlers.HandlerManager.put(HandlerManager.java:2525) 
       at org.wso2.carbon.registry.core.jdbc.handlers.HandlerLifecycleManager.put(HandlerLifecycleManager.java:1005) 
       at org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.put(EmbeddedRegistry.java:697) 
       at org.wso2.carbon.registry.core.caching.CacheBackedRegistry.put(CacheBackedRegistry.java:465) 
       at org.wso2.carbon.registry.core.session.UserRegistry.put(UserRegistry.java:658) 
       at org.wso2.carbon.governance.api.common.GovernanceArtifactManager.addGovernanceArtifact(GovernanceArtifactManager.java:155) 
       at org.wso2.carbon.governance.api.services.ServiceManager.addService(ServiceManager.java:116) 
       at org.wso2.carbon.discovery.util.DiscoveryServiceUtils.addService(DiscoveryServiceUtils.java:152) 
       at org.wso2.carbon.discovery.proxy.DiscoveryProxy$1.run(DiscoveryProxy.java:89) 
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
       at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
       at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
       at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1 
       at java.lang.String.substring(String.java:1911) 
       at org.wso2.carbon.registry.extensions.handlers.utils.EndpointUtils.deriveEndpointFromUrl(EndpointUtils.java:674) 
       at org.wso2.carbon.registry.extensions.handlers.utils.EndpointUtils.saveEndpoint(EndpointUtils.java:483) 
       at org.wso2.carbon.registry.extensions.handlers.utils.EndpointUtils.saveEndpointsFromServices(EndpointUtils.java:280) 
       at org.wso2.carbon.registry.extensions.handlers.ServiceMediaTypeHandler.put(ServiceMediaTypeHandler.java:353) 
       at org.wso2.carbon.registry.core.jdbc.handlers.HandlerManager.put(HandlerManager.java:2503) 
       ... 14 more 

Мы попытались решить эту проблему в течение нескольких часов, читая документацию продукта WSO2 и поиск несколько форумов , блоги и т. д. К сожалению, мы не смогли найти решение.

Примечание. Интеграция WS-Discovery с сервером приложений WSO2 вместо Tomcat просто отлично работала. Но при использовании WSO2 ESB в качестве клиента обнаружения для обнаружения сервисов из WSO2 Greg мастер для создания прокси-служб из служб обнаружения на WSO2 ESB пропускает тэг publishWSDL xml после создания прокси. Этот тег должен быть добавлен вручную . Есть ли способ сделать это без дополнительного редактирования?

Мы будем признательны за любую помощь.

Заранее спасибо

+0

Можете ли вы перехватить запросы приветствия Discovery, отправленные GREG через Tomcat и Application Server, и сравнить их? Это должно дать представление о том, чего не хватает. Также отправьте их здесь, если это возможно, чтобы мы могли посмотреть –

ответ

0

Спасибо за быстрый ответ

Мы перехватывали запросы приветствия, отправленные WSO2 Greg с помощью Tomcat и сервера приложений WSO2. Для этой цели мы использовали soapUI mock . Просьбы сообщение мыла конверты выглядеть следующим образом ...

Tomcat:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:tns="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01"> 
<soap:Header> 
    <wsa:Action>http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/Hello</wsa:Action> 
    <wsa:MessageID>urn:uuid:e01ce7dc-53c0-4b36-b7d5-0e84e3bd6a5d</wsa:MessageID> 
    <wsa:To>https://localhost:9443/services/DiscoveryProxy</wsa:To> 
    <wsa:ReplyTo> 
    <wsa:Address>http://www.w3.org/2005/08/addressing/none</wsa:Address> 
    </wsa:ReplyTo> 
</soap:Header> 
<soap:Body> 
<ns2:Hello xmlns="http://www.w3.org/2005/08/addressing" xmlns:ns2="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01"> 
    <EndpointReference> 
     <Address>urn:uuid:be46c1fc-1646-4bcc-8715-1aed4040fdd5</Address> 
     <ReferenceParameters/> 
    </EndpointReference> 
    <ns2:Types xmlns:ns3="http://user.service.scheck.server.tia/">ns3:IZ3UserService</ns2:Types> 
    <ns2:Scopes/> 
    <ns2:XAddrs>/userService</ns2:XAddrs> 
    <ns2:MetadataVersion>1</ns2:MetadataVersion> 
    </ns2:Hello> 
</soap:Body> 
</soap:Envelope> 

WSO2 Application Server:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">    
<soapenv:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
    <mns:serviceName xmlns:mns="http://www.wso2.org/ws/discovery">echo</mns:serviceName> 
    <mns:wsdlURI xmlns:mns="http://www.wso2.org/ws/discovery">http://10.200.2.114:9764/services/echo?wsdl</mns:wsdlURI> 
    <wsa:To>https://localhost:9443/services/DiscoveryProxy</wsa:To> 
    <wsa:ReplyTo> 
    <wsa:Address>http://www.w3.org/2005/08/addressing/none</wsa:Address> 
    </wsa:ReplyTo> 
    <wsa:MessageID>urn:uuid:d21e108b-34a2-4313-8b12-a22015567a51</wsa:MessageID> 
    <wsa:Action>http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/Hello</wsa:Action> 
</soapenv:Header> 
<soapenv:Body> 
    <wsd:Hello xmlns:wsd="http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01"> 
    <wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/08/addressing"> 
     <wsa:Address>urn:uuid:439a1cd5-fb36-40e2-a54e-e0cb7f3409e4</wsa:Address> 
    </wsa:EndpointReference> 
    <wsd:Types xmlns:axis2ns1="http://echo.services.core.carbon.wso2.org">axis2ns1:echoPortType</wsd:Types> 
    <wsd:Scopes>http://docs.oasis-open.org/ws-dd/ns/discovery/2009/01/DefaultScope</wsd:Scopes> 
    <wsd:XAddrs>https://10.200.2.114:9444/services/echo http://10.200.2.114:9764/services/echo</wsd:XAddrs> 
    <wsd:MetadataVersion>1</wsd:MetadataVersion> 
    </wsd:Hello> 
    </soapenv:Body> 
    </soapenv:Envelope> 

Сравнение обоих запросов сообщений, которые мы заметили, что некоторые теги отсутствуют как serviceName, wsdlURI и самое главное , по нашему мнению, XAddrs. Добавив XAddrs вручную в запрос soapUI, мы смогли зарегистрировать службу cxf на WSO2 GReg. Возможно, вы можете дать нам совет, как это можно было бы достичь, настроив cxf через весну или аннотируя наши версии веб-сервисов .

Еще раз спасибо .. это нам очень помогло!