gpt4 book ai didi

Java Web Service(SOAP) 消息格式通用(名称/值属性)节点与特定节点

转载 作者:行者123 更新时间:2023-12-01 12:28:24 24 4
gpt4 key购买 nike

需要有关 Java Web 服务(SOAP)消息格式的建议。考虑两种消息格式。

您能否分享一下您对这些方法的想法。您会推荐什么?

1) 具体消息格式使用数据属性的实际名称(例如用户名字、姓氏、ssn .... 等)指定消息节点。请参阅下面的示例

优点:消息 xsd 将具有要传播的数据的实际数据类型。这确保了数据有效。

缺点:消息格式的更改将导致 xsd 更改,从而导致服务的多个版本。这将花费不同版本服务的维护成本。

2) 通用消息格式使用名称值对指定消息节点。请参阅下面的示例消息。

优点:可以使用附加属性发送附加数据,而无需更改消息格式。消息的单一版本可以轻松维护。

缺点:数据未键入且无法验证。服务实现需要对属性名称进行硬编码、解析数据、验证数据。处理具有多个值的数据将使用一些分隔符,例如逗号(,)。处理日期、时间、货币数据等格式化数据的成本很高。

具体格式消息

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:myTestServiceOperation xmlns:ns1="http://xmlns.myenterprise.com/myenterprise/myTestWebService/types/">
<UserInfo>
<BioData>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
<SSN>123-34-567</PersonNumber>
<DateOfBirth>09/01/1980</DataOfBirth>
</BioData>
<EducationalInfo>
<Qualification>Master of Science</Qualification>
<Institute>ABC</Institure>
<CourseDuration>2 Years</CourseDuration>
</EducationalInfo>
<EmploymentInfo>
<JobTile>Administrator</JobTitle>
<Employer>XYZ Corp</Employer>
<EmploymentInfo>
</UserInfo>
</ns1:myTestServiceOperation>
</soap:Body>
</soap:Envelope>
<小时/>

通用格式消息

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:myTestServiceOperation xmlns:ns1="http://xmlns.myenterprise.com/myenterprise/myTestWebService/types/">
<Record category="BioData">
<Property name="FirstName" value="John"/>
<Property name="LastName" value="Smith"/>
<Property name="SSN" value="123-34-567"/>
</Record>
<Record category="Education">
<Property name="Qualification" value="Master of Science"/>
<Property name="Institute" value="ABC"/>
<Property name="CourseDuration" value="2 Years"/>
</Record>
<Record category="Employment">
<Property name="JobTile" value="Manager"/>
<Property name="XYZ Corp" value="XYZ Corp"/>
<Property name="CourseDuration" value="2 Years"/>
</Record>
</ns1:myTestServiceOperation>
</soap:Body>
</soap:Envelope>

最佳答案

为服务提供通用模式并不是一个好主意,除了少数情况外,例如数据库查询的响应(相同的服务用于查询不同的表和不同的列)

如果架构可能非常频繁地更改,那么消费者受到的影响将比生产者受到的影响更大。因此,最好运行多个版本的服务,但这需要更多的努力。

但是,您始终可以使用请求和响应转换来仅运行一个版本的服务,具体方法如下。

  1. 检测传入请求的版本(架构上的版本元素应与 XPATH 一起执行此操作)
  2. 使用 XML 转换器,如 Contivo将传入请求转换为最新请求版本
  3. 将此转换后的 XML 发送到服务以进行响应。请记住,您仅运行最新版本的服务
  4. 现在将输出 XML 转换为旧版本,与请求相同,然后发送回客户端。

例如

  1. 客户端发送架构版本 1 的请求
  2. 将请求转换为最新版本,例如 12
  3. 将请求版本 12 发送到服务
  4. 获取响应版本 12
  5. 将响应版本 12 转换为响应版本 1
  6. 使用响应版本 1 回复客户

关于Java Web Service(SOAP) 消息格式通用(名称/值属性)节点与特定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26141432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com