Необходимо создать службу WSO2 DSS, которая может считывать параметр с URL-адреса.

Я создал простую службу dss, которая, вводя cust_id, дает мне данные клиента.

Я представил этот веб-сервис как ресурс http get со следующим URL-адресом GET /services/getCustDetailDSS/getDetail?cid=101.

Соответствующий xml-код для моей службы выглядит следующим образом

<data name="getCustomerDetailDSS" serviceGroup="" serviceNamespace="">
<description/>
<config id="mydb">
    <property name="carbon_datasource_name">mydb</property>
</config>
<query id="get_customer_detail" useConfig="mydb">
    <sql>select identifier,user_status from customer_detail where identifier = :cid</sql>
    <param name="cid" paramType="SCALAR" sqlType="STRING"/>
    <result element="customer">
        <element column="identifier" name="cid" xsdType="xs:string"/>
        <element column="user_status" name="status" xsdType="xs:string"/>
    </result>
</query>
<operation name="get_customer_detail_operation">
    <call-query href="get_customer_detail">
        <with-param name="cid" query-param="identifier"/>
    </call-query>
</operation>
<resource method="GET" path="/getDetail">
    <call-query href="get_customer_detail">
        <with-param name="cid" query-param="cid"/>
    </call-query>
</resource>
</data>

Но теперь я хочу, чтобы служба dss считывала cust_id из URL-адреса, а не передавала его в качестве параметра.

то есть я хочу использовать службу dss как GET /services/getCustDetailDSS/cid/101/getDetail

Как я могу сделать это в DSS?

Может ли кто-нибудь предоставить изменения, которые мне нужно сделать в моем dss?


person mihir S    schedule 12.06.2014    source источник


Ответы (2)


Для GET /services/getCustDetailDSS/getDetail/cid/101

Вы должны отредактировать путь к ресурсу следующим образом.

<resource method="GET" path="getDetail/cid/{cid}">
person Bee    schedule 12.06.2014
comment
это не работает ... потому что, если я добавлю этот путь n после, если есть URL-адрес параметра, такой как /getDetail/cid/?identifier=? и если я не добавлю параметр запроса (что я хочу сделать), URL-адрес будет похож на /getDetail/cid/. и если я введу идентификатор после /cid/ и попытаюсь поразить его из soapui, я получаю код ошибки DS: INCOMPATIBLE_PARAMETERS_ERROR\nВложенное исключение:-\njavax.xml.stream.XMLStreamException: Сообщение об ошибке DS: ошибка в 'Query.extractParams', не удается найти параметр запроса с именем:cid\nDS - person mihir S; 13.06.2014
comment
Это должно работать. Какую версию DSS вы используете? Попробуйте и эту команду curl. (соответственно изменить ip/port) curl -k -H "Accept: application/json" https://10.213.209.1:9483/services/getCustDetailDSS.HTTPEndpoint/getDetail/cid/101 - person Bee; 13.06.2014
comment
я использую дсс 3.2.0. Я попробовал указанную выше команду curl, но получил ту же ошибку, что и в моем первом комментарии. Также я добавляю дополнительные ответные stmts в эти комментарии.. \nПространство имен по умолчанию: ws.wso2.org/dataservice\nИмя текущего запроса: _get_getstatus_cid\nТекущие параметры: {}\n\n,Подробности:}} - person mihir S; 16.06.2014
comment
Можете ли вы поместить xml-код службы данных, если вы пробовали в своей системе? - person mihir S; 16.06.2014
comment
Я пробовал только в DSS 3.1.1. Попробую и на 3.2.0 тоже. Существует пример службы DSS (samples/ResourcesSample), который поставляется с пакетом DSS. Это образец того, что вы ищете. Попробуйте, если это работает для вас. - person Bee; 17.06.2014
comment
Я пробовал в 3.2.1, и он отлично работает, когда Accept: application/xml. Но я получаю другое исключение, когда Accept: application/json. Я отправлю письмо по электронной почте в список разработчиков и отвечу, как только получу ответ. А пока вы можете попробовать с Accept: application/xml - person Bee; 17.06.2014
comment
Я все еще получаю сообщение об ошибке несовместимых параметров с заголовком принятия xml. Похоже, я делаю какую-то ошибку при создании службы dss. правильно это или нет... - person mihir S; 17.06.2014
comment
‹resource method=GET path=/getDetail/{cid}› ‹call-query href=get_customer_detail/› ‹/resource› - person mihir S; 17.06.2014
comment
Вам также понадобится <with-param name="cid" query-param="cid"/> часть. Попробуйте также удалить начальную косую черту в пути. path="getDetail/{cid}" - person Bee; 17.06.2014
comment
да, это сработало... большое спасибо, бхатхия, за всю вашу помощь... ранее, когда я добавил параметр с ресурсом, он не работал... думаю, я сделал какую-то ошибку... теперь, после добавления параметров с ресурсом, он работает отлично отлично..спасибо большое - person mihir S; 17.06.2014
comment
Также Accept:application/json также работает в моем. - person mihir S; 17.06.2014
comment
Рад это слышать... :) - person Bee; 17.06.2014
comment
я ищу это, но что, если у меня есть 2 параметра или более с нулевым значением? - person irvana; 29.10.2015

С WSO2 DSS 3.2.1 теперь вы можете определить параметр строки запроса, как показано ниже:

<param name="cid" sqlType="QUERY_STRING"/>

вместо:

<param name="cid" paramType="SCALAR" sqlType="STRING"/>

и ваш URL должен выглядеть так:

.../getDetail?cid=101
person john smith    schedule 02.10.2014