我必须通过 BizTalk 连接 REST 服务。该服务返回一个 JSON 响应,如下所示。当 BizTalk 响应端口尝试解码 JSON 消息时,我收到有关 JSON 到 XML 转换的错误。发生此错误是因为 JSON 消息中嵌入了 HTML 标记。
错误:
(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 标记 (City) 的文本,这就是为什么当 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
<b>City</b> 2. Etap Global
<b>Cıty</b>
</label>
<value>Global
<>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>
我的服务也可以返回 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 <b>Cıty</b> 1. Etap Vıllaları Sokak</label>
<value>Global Cıty 1. Etap Vıllaları Sokak</value>
</suggestion>
<suggestion>
<id>111009</id>
<label>Global <b>Cıty</b> 2. Etap Vıllaları Sokak</label>
<value>Global Cıty 2. Etap Vıllaları Sokak</value>
</suggestion>
</suggestions>
最佳答案
使用这个模式:
<?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>
这条管道:
生成此消息:
<ns0:Root xmlns:ns0="http://BizTalk_Server_Project1.JSONSchema1">
<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>
</ns0:Root>
关于json - BizTalk JSON 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31149288/
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最
我有一个非常简单的RubyRack服务器,例如:app=Proc.newdo|env|req=Rack::Request.new(env).paramspreq.inspect[200,{'Content-Type'=>'text/plain'},['Somebody']]endRack::Handler::Thin.run(app,:Port=>4001,:threaded=>true)每当我使用JSON对象向服务器发送POSTHTTP请求时:{"session":{"accountId":String,"callId":String,"from":Object,"headers":
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
首先,我使用的是rails3.1.3和来自master的carrierwavegithub仓库的分支。我使用after_init钩子(Hook)来确定基于属性的字段页面模型实例并为这些字段定义属性访问器将值存储在序列化哈希中(希望它清楚我是什么谈论)。这是我正在做的事情的精简版:classPage省略mount_uploader命令让我可以访问我想要的属性。但是当我安装uploader时出现错误消息说“nil类的未定义新方法”我在源代码中读到有方法read_uploader和扩展模块中的write_uploader。我如何必须覆盖这些来制作mount_uploader命令使用我的“虚拟
我在一个简单的RailsAPI中有以下Controller代码:classApi::V1::AccountsControllerehead:not_foundendendend问题在于,生成的json具有以下格式:{id:2,name:'Simpleaccount',cash_flows:[{id:1,amount:34.3,description:'simpledescription'},{id:2,amount:1.12,description:'otherdescription'}]}我需要我生成的json是camelCase('cashFlows'而不是'cash_flows'
我正在学习如何使用JSONgem解析和生成JSON。我可以轻松地创建数据哈希并将其生成为JSON;但是,在获取一个类的实例(例如Person实例)并将其所有实例变量放入哈希中以转换为JSON时,我脑袋放屁。这是我遇到问题的例子:require"json"classPersondefinitialize(name,age,address)@name=name@age=age@address=addressenddefto_jsonendendp=Person.new('JohnDoe',46,"123ElmStreet")p.to_json我想创建一个.to_json方法,这样我就可以获
我正在构建一个带有Rails后端的JS应用程序,为了不混淆snake和camelcases,我想通过从服务器返回camelcase键名来规范化这一切。因此,当从API返回时,user.last_name将返回user.lastName。我如何实现这一点?谢谢!编辑:添加Controller代码classApi::V1::UsersController 最佳答案 我的方法是使用ActiveModelSerializer和json_api适配器:在你的Gemfile中,添加:gem'active_model_serializers'创建
我有以下内容:@array.inspect["x1","x2","adad"]我希望能够将其格式化为:client.send_message(s,m,{:id=>"x1",:id=>"x2",:id=>"adad"})client.send_message(s,m,???????)如何在????????中获得@array输出?空间作为ID?谢谢 最佳答案 {:id=>"x1",:id=>"x2",:id=>"adad"}不是有效的散列,因为您有键冲突它应该是这样的:{"ids":["x1","x2","x3"]}更新:@a=["x1
这里我想输出带有动态组名的json而不是单词组@tickets.eachdo|group,v|json.group{json.array!vdo|ticket|json.partial!'tickets/ticket',ticket:ticketend}end@ticket是这样的散列{a:[....],b:[.....]}我想要这样的输出{a:[.....],b:[....]} 最佳答案 感谢@AntarrByrd,这个问题有类似的答案:JBuilderdynamickeysformodelattributes使用上面的逻辑我已经