【发布时间】:2018-11-27 01:08:09
【问题描述】:
我正在使用 Mule ESB 将输入 JSON 转换为要发送到 SOAP Web 服务的 XML。我能够构建结构并将命名空间添加到根元素,但我的 SOAP 需要的 XML 输出非常精确,并且要求元素中的前缀和命名空间。
这是我的 Groovy 脚本:
def xml = new StringWriter().with { w -> new groovy.xml.MarkupBuilder(w).with {
SaveContact('http://tempuri.org/') {
contact() {
Address('http://schemas.datacontract.org/2004/07/PivotalService.Entities')
{
Address1(payload.Address1)
Address2(payload.Address2)
Address3(payload.Address3)
City(payload.City)
Country(payload.Country)
Fax(payload.Fax)
Mobile(payload.Mobile)
Phone(payload.Phone)
PhoneExtension(payload.PhoneExtension)
State(payload.State)
Workphone(payload.Workphone)
WorkphoneExtension(payload.WorkphoneExtension)
Zip(payload.Zip)
}
ContactId(payload.ContactId)
Email(payload.Email)
Firstname(payload.Firstname)
Gender(payload.Gender)
Language(payload.Language)
Lastname(payload.Lastname)
PrestashopId(payload.PrestashopId)
}
Consent(payload.Consent)
}
}
w.toString()
}
这是它给我的输出示例:
<SaveContact xmlns='http://tempuri.org/'>
<contact>
<Address xmlns='http://schemas.datacontract.org/2004/07/PivotalService.Entities'>
<Address1>2, test street</Address1>
<Address2>Appartement 10</Address2>
<Address3 />
<City>Montreal</City>
<Country>Canada</Country>
<Fax />
<Mobile>+1(418)123-1234</Mobile>
<Phone>+1(418)123-1234</Phone>
<PhoneExtension />
<State>Québec</State>
<Workphone />
<WorkphoneExtension />
<Zip>A1A1A1</Zip>
</Address>
<ContactId />
<Email></Email>
<Firstname>fooo</Firstname>
<Gender>1</Gender>
<Language>3</Language>
<Lastname>baaarrr</Lastname>
<PrestashopId>172</PrestashopId>
</contact>
<Consent></Consent>
</SaveContact>
如您所见,在添加到元素时,命名空间甚至不起作用。
这是我想要的 XML(我不确定是否需要前缀 (ns0..etc)):
<?xml version="1.0" encoding="ISO-8859-1"?>
<ns0:SaveContact xmlns:ns0="http://tempuri.org/">
<ns0:contact>
<ns1:Address xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">
<ns1:Address1>2, test street</ns1:Address1>
<ns1:Address2>Appartement 10</ns1:Address2>
<ns1:City>Montreal</ns1:City>
<ns1:Country>Canada</ns1:Country>
<ns1:Mobile>+1(418)123-1234</ns1:Mobile>
<ns1:Phone>+1(418)123-1234</ns1:Phone>
<ns1:State>Quebec</ns1:State>
<ns1:WorkPhone>+1(418)123-1234</ns1:WorkPhone>
<ns1:Zip>A1A1A1</ns1:Zip>
</ns1:Address>
<ns1:Email xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">null</ns1:Email>
<ns1:Firstname xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">fooo</ns1:Firstname>
<ns1:Gender xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">1</ns1:Gender>
<ns1:Language xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">3</ns1:Language>
<ns1:Lastname xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">baaarrr</ns1:Lastname>
<ns1:PrestashopId xmlns:ns1="http://schemas.datacontract.org/2004/07/PivotalService.Entities">172</ns1:PrestashopId>
</ns0:contact>
</ns0:SaveContact>
感谢您的帮助。
【问题讨论】: