2015-06-30 4 views
3

Мне нужно подключить услугу REST через BizTalk. Служба возвращает ответ JSON, как показано ниже. Когда порт ответа BizTalk пытается декодировать сообщение JSON, я получаю сообщение об ошибке преобразования JSON в XML. Эта ошибка возникает из-за встроенных тегов HTML в сообщении JSON.BizTalk JSON Deserialize

Ошибка:

(There was a failure executing the response(receive) pipeline: "Avansas.Paritus.Suggest.T.JSONReceive, Avansas.Paritus.Suggest.T, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7b2984270a9ffd13" Source: "JSON decoder" Send Port: "Avansas.Ibrahim.Suggest.T.SendPort" URI: "api1.test.com/services/rest"; Reason: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.)

Для примера:

, как показано ниже ответного сообщения имеет элемент этикетки в формате JSON. Элемент label имеет текст с тегом html (Город), поэтому, когда BizTalk пытается конвертировать JSON в XML, я получаю сообщение об ошибке. Я думаю, что BizTalk пытается преобразовать JSON как рисунок 2, но я хочу преобразовать его как рисунок 3.

Как я могу решить эту проблему?

Есть ли способ передать передать на оркестровку без какой-либо схемы?

Рисунок1

{ 
    "suggestion": [ 
     { 
      "id": "[31 31 31 30 30 39]", 
      "label": "Global <b>City</b> 2. Etap Global <b>Cıty</b> ", 
      "value": "Global <b>City</b> 2. Etap Villaları " 
     }, 
     { 
      "id": "[39 33 36 32 35 36]", 
      "label": "<b>City</b> Aqua Villas Sk. Kuşadası Aydın", 
      "value": "<b>City</b> Aqua Villas Sk. Kuşadası Aydın" 
     } 
    ] 
} 

Рисунок 2:

<root> 
    <suggestion> 
     <id>[31 31 31 30 30 39]</id> 
     <label>Global 
      <b>City</b> 2. Etap Global 
      <b>Cıty</b> 
     </label> 
     <value>Global 
      <b>City</b> 2. Etap Villaları 
     </value> 
    </suggestion> 
    <suggestion> 
     <id>[39 33 36 32 35 36]</id> 
     <label> 
      <b>City</b> Aqua Villas Sk. Kuşadası Aydın 
     </label> 
     <value> 
      <b>City</b> Aqua Villas Sk. Kuşadası Aydın 
     </value> 
    </suggestion> 
</root> 

Рисунок 3:

<root> 
    <suggestion> 
     <id>[31 31 31 30 30 39]</id> 
     <label>Global 
      &lt;b&gt;City&lt;/b&gt; 2. Etap Global 
      &lt;b&gt;Cıty&lt;/b&gt; 
     </label> 
     <value>Global 
      &lt;&gt;City&lt;/b&gt; 2. Etap Villaları 
     </value> 
    </suggestion> 
    <suggestion> 
     <id>[39 33 36 32 35 36]</id> 
     <label> 
      &lt;b&gt;City&lt;/b&gt; Aqua Villas Sk. Kuşadası Aydın 
     </label> 
     <value> 
      &lt;b&gt;City&lt;/b&gt; Aqua Villas Sk. Kuşadası Aydın 
     </value> 
    </suggestion> 
</root> 

Также моя служба может возвращать ответ xml, и когда я пытаюсь обработать xml-ответ, получите ошибку ниже.

XML Error There was a failure executing the response(receive) pipeline: "Microsoft.BizTalk.DefaultPipelines.XMLReceive, Microsoft.BizTalk.DefaultPipelines, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Source: "XML disassembler" Send Port: "aaa.bbb.Suggest.T.SendPort" URI: " https://api1.test.com/services/rest " Reason: Finding the document specification by message type "html" failed. Verify the schema deployed properly

и XML-ответ, как показано ниже

<?xml version="1.0" encoding="UTF-8"?> 
<suggestions> 
    <suggestion> 
     <id>111011</id> 
     <label>Global &lt;b&gt;Cıty&lt;/b&gt; 1. Etap Vıllaları Sokak</label> 
     <value>Global Cıty 1. Etap Vıllaları Sokak</value> 
    </suggestion> 
    <suggestion> 
     <id>111009</id> 
     <label>Global &lt;b&gt;Cıty&lt;/b&gt; 2. Etap Vıllaları Sokak</label> 
     <value>Global Cıty 2. Etap Vıllaları Sokak</value> 
    </suggestion> 
</suggestions> 
+0

Можете ли вы разместить сообщение об ошибке? –

+0

Какую версию BizTalk вы используете? (2013 R2) – ibrahimsen

+0

Можете ли вы разместить сообщение об ошибке? (произошел сбой выполнения конвейера ответа (получения): «Avansas.Paritus.Suggest.T.JSONReceive, Avansas.Paritus.Suggest.T, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 7b2984270a9ffd13« Источник: JSON-декодер «Отправить порт:« Avansas.Ibrahim.Suggest.T.SendPort »URI:« https://api1.test.com/services/rest »Причина: Неожиданный символ, встречающийся при анализе значения: <. Path '', line 0, позиция 0. ) – ibrahimsen

ответ

2

Используя эту схему:

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://BizTalk_Server_Project1.JSONSchema1" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element minOccurs="0" maxOccurs="unbounded" name="suggestion"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element minOccurs="0" name="id" type="xs:string" /> 
       <xs:element minOccurs="0" name="label" type="xs:string" /> 
       <xs:element minOccurs="0" name="value" type="xs:string" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

И этот газопровод:

JSON Pipeline

Производит т его сообщение:

<ns0:Root xmlns:ns0="http://BizTalk_Server_Project1.JSONSchema1"> 
    <suggestion> 
    <id>[31 31 31 30 30 39]</id> 
    <label>Global &lt;b&gt;City&lt;/b&gt; 2. Etap Global &lt;b&gt;Cıty&lt;/b&gt; </label> 
    <value>Global &lt;b&gt;City&lt;/b&gt; 2. Etap Villaları </value> 
    </suggestion> 
    <suggestion> 
    <id>[39 33 36 32 35 36]</id> 
    <label>&lt;b&gt;City&lt;/b&gt; Aqua Villas Sk. Kuşadası Aydın</label> 
    <value>&lt;b&gt;City&lt;/b&gt; Aqua Villas Sk. Kuşadası Aydın</value> 
    </suggestion> 
</ns0:Root> 
+0

Спасибо за ваше предложение, но у меня такой же трубопровод, и он не решает мою проблему. Также моя служба может возвращать ответ xml, и когда я пытаюсь получить ответ xml, я получаю ошибку ниже. Причина: Не удалось найти спецификацию документа по типу сообщения «html». Проверьте правильность развертывания схемы. – ibrahimsen

+0

@ibrahimsen Вы уверены, что у вас есть этот конвейер в ответе на ваш порт отправки? Какую конфигурацию вы используете в своем дизассемблере XML? – Dijkgraaf

+0

@Dijkgraaf Да, у меня есть XML дизассемблер на моем конвейере. Я решил проблему с ошибкой сервера, поэтому я не смог обработать сообщение. Если значение запроса неверно, тогда сервер возвращает текст/plain, поэтому biztalk не может сериализовать сообщение. Когда наш запрос верный сервер возвращает содержимое приложения/json, моя проблема решена. Но все же я не знаю, как я могу обрабатывать текстовое сообщение/сообщение об ошибке на biztalk. – ibrahimsen