2015-08-10 2 views
0

Использование WSO2 ESB 4.8.1, я настроил прокси-сервер WSDL, с которым я хочу получить доступ через REST. прокси указывает на URI SOAP WSDL и публикует WSDL. Кажется, это работает нормально, и я вижу службу и ее различные операции в пользовательском интерфейсе администратора WSO2. Аналогично, если я перехожу на localhost: 8280/services/Параметры работы WSO2 REST to SOAP

Вопросы, как передать конкретные параметры операции при доступе через HTTP REST?

Предположим, что моя FooService OperationX ожидает параметр «p1», могу ли я передать это непосредственно при доступе к localhost: 8280/services/FooService/OperationX в браузере?

Я пытался, например, локальный хост: 8280/услуги/FooService/SomeOperation p1 = SomeValue, но всегда получает ошибку проверки, что отсутствует обязательный параметр:

cvc-complex-type.2.4.b: The content of element 'axis2ns15:OperationXRequest' is not complete. One of '{"somenamespace":p1}' is expected. 

Может ли это быть поддержаны основным WSDL прокси-сервер? Или мне нужно использовать API?

+0

посмотрите эти образцы: https://docs.wso2.com/display/ESB460/Using+REST+with+a+Proxy+Service#UsingRESTwithaProxyService-SOAPClientandRESTService вы можете отправить запрос POX на прокси. Я думаю, что лучше использовать API в этом сценарии ... поместить всю логику в последовательности просто вызывать эти последовательности из конфигурации API. Также посмотрите этот пост: http://miyurudw.blogspot.com/2013/07/wso2-esb-reading-query-parametres-from.html –

ответ

0

Я думаю, что лучшим вариантом для вашего сценария является использование api для доступа к REST. Здесь я создал api (я использовал http://jsonplaceholder.typicode.com/comments как мой задний конец REST), который получает параметр запроса (postId), который был отправлен в запросе REST (http://172.22.99.96:8290/test/comments?postId=1), и присваивает этому значению свойство mypostId внутри api. Затем я изменяю полезную нагрузку, добавляя свойство mypostId, используя посредник фабрики полезных нагрузок, который будет соответствовать запросу эхо-сервиса (я использовал эхо-сервис как бэкэнд SOAP). Затем я использую обогащающий посредник, чтобы изменить мой конверт с мылом, чтобы он соответствовал конверту мыльного запроса запроса эха, добавив пространство имен xmlns: echo = "http://echo.services.core.carbon.wso2.org" ". Наконец, я отправляю свой созданный запрос для эхо-сервиса прокси.

<api xmlns="http://ws.apache.org/ns/synapse" name="test" context="/test"> 
    <resource methods="GET" uri-template="/comments?postId={postId}"> 
     <inSequence> 
     <log level="custom"> 
      <property name="Message Flow" value="--- Order GET ---"></property> 
     </log> 
     <log level="custom"> 
      <property name="postId" expression="$url:postId"></property> 
     </log> 
     <property name="mypostId" expression="$url:postId"></property> 
     <call> 
      <endpoint> 
       <http method="GET" uri-template="http://jsonplaceholder.typicode.com/comments?postId={uri.var.postId}"></http> 
      </endpoint> 
     </call> 
     <payloadFactory media-type="xml"> 
      <format> 
       <echo:echoInt xmlns:echo="http://echo.services.core.carbon.wso2.org"> 
        <in>$1</in> 
       </echo:echoInt> 
      </format> 
      <args> 
       <arg evaluator="xml" expression="get-property('mypostId')"></arg> 
      </args> 
     </payloadFactory> 
     <log level="full"></log> 
     <log level="custom"> 
      <property name="Message Flow" value="--- After Palyload factory---"></property> 
     </log> 
     <property name="extarctedBody" expression="$body"></property> 
     <log level="custom"> 
      <property name="MyextarctedBody" expression="get-property('extarctedBody')"></property> 
     </log> 
     <log level="full"></log> 
     <enrich> 
      <source type="inline" clone="true"> 
       <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:echo="http://echo.services.core.carbon.wso2.org"></soapenv:Envelope> 
      </source> 
      <target type="envelope"></target> 
     </enrich> 
     <log level="custom"> 
      <property name="Message Flow" value="--- Order GET2 ---"></property> 
     </log> 
     <log level="full"></log> 
     <enrich> 
      <source type="property" clone="true" property="extarctedBody"></source> 
      <target xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:echo="http://echo.services.core.carbon.wso2.org" action="child" xpath="//soapenv:Envelope"></target> 
     </enrich> 
     <log level="full"></log> 
     <send> 
      <endpoint> 
       <address uri="http://localhost:8290/services/echo"></address> 
      </endpoint> 
     </send> 
     </inSequence> 
     <outSequence> 
     <send></send> 
     </outSequence> 
    </resource> 
</api> 

Надеюсь, это может вам помочь.

+0

Как мы устанавливаем эти свойства в мыльную службу внутри insequence и как надлежащий запрос на мыло? –

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