Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 SOAP-сервис и невадидный запрос  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2889
Доброго всем дня.
Создал SOAP сервис с помощью мастера из wsdl

+ wsdl
<?xml version="1.0"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="myname" targetNamespace="http://tempuri.org/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:name">
  <message name="SendBlockRequest">
    <part name="Text" type="xs:string"/>
  </message>
  <message name="SendBlockResponse">
    <part name="return" type="xs:boolean"/>
  </message>
  <message name="GetBlockRequest">
    <part name="Login" type="xs:string"/>
    <part name="Password" type="xs:string"/>
    <part name="Text" type="xs:string"/>
  </message>
  <message name="GetBlockResponse">
    <part name="Text" type="xs:string"/>
    <part name="return" type="xs:boolean"/>
  </message>
  <portType name="Portname">
    <operation name="SendBlock">
      <input message="tns:SendBlockRequest"/>
      <output message="tns:SendBlockResponse"/>
    </operation>
    <operation name="GetBlock">
      <input message="tns:GetBlockRequest"/>
      <output message="tns:GetBlockResponse"/>
    </operation>
  </portType>
  <binding name="MyBinding" type="tns:myname">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="SendBlock">
      <soap:operation soapAction="urn:myname" style="rpc"/>
      <input>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="name"/>
      </input>
      <output>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="name"/>
      </output>
    </operation>
    <operation name="GetBlock">
      <soap:operation soapAction="urn:name" style="rpc"/>
      <input>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="name"/>
      </input>
      <output>
        <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="name"/>
      </output>
    </operation>
  </binding>
  <service name="myservice">
    <port name="portname" binding="tns:mybinding">
      <soap:address location="http://server/soap"/>
    </port>
  </service>
</definitions>

Всё бы ничего, но от клиентов бывает приходит запрос
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:s='http://www.w3.org/2001/XMLSchema' xmlns:SOAP-ENC='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='name' xmlns:types='name'>
<SOAP-ENV:Body SOAP-ENV:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>
<types:GetBlock>
<Login xsi:type="s:string">LOGIN</Login>
<Password xsi:type="s:string">PASSWORD</Password>
<Text xsi:type="s:string"><test></test> </Text>
</types:GetBlock>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

В результате получаю ошибку
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="http://www.w3.org/2001/XMLSchema">
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode>SOAP-ENV:Client</faultcode>
         <faultstring>Неправильно сформированное SOAP сообщение</faultstring>
         <detail>
            <error xmlns="http://tempuri.org/">
               <text>ОШИБКА #6253: Проверка типа данных завершилась неудачей для тега Text (заканчивается в строке 6 символ 27). Найден непредусмотренный тег &lt;test>.</text>
            </error>
         </detail>
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

что в принципе и понятно. Но с клиентами иногда лучше не спорить.
Вопрос, можно ли как-то в сервисе сделать проверку входного запроса и по необходимости подменять символы на < и т.п?
Или может как-то переопределить св-во Text, чтобы оно могло быть и типом XML?


I Have Nine Lives You Have One Only
THINK!
11 июл 18, 07:26    [21561150]     Ответить | Цитировать Сообщить модератору
 Re: SOAP-сервис и невадидный запрос  [new]
Alesha
Member

Откуда: Москва
Сообщений: 55
Попробуйте использовать для типизации данного свойства класс %XML.String
12 июл 18, 09:54    [21564936]     Ответить | Цитировать Сообщить модератору
 Re: SOAP-сервис и невадидный запрос  [new]
Блок А.Н.
Member

Откуда: Новосибирск
Сообщений: 3758
Alesha,

не уверен, что поможет. Насколько я понимаю, парсер сначала распознает текст и создает из нее древовидную структуру, а потом уже на это накладываются классы. И как сделать тег <text></text> не тегом, а контентом - я не знаю.
12 июл 18, 11:38    [21565487]     Ответить | Цитировать Сообщить модератору
 Re: SOAP-сервис и невадидный запрос  [new]
Alesha
Member

Откуда: Москва
Сообщений: 55
Блок А.Н.

Нам помогало
12 июл 18, 13:04    [21565830]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить