web service怎样使用定制的xml格式传送数据? 400 报错
项目需要从另外一个系统同步基础数据,我目前用axis1.4作为web service引擎,但是对方系统的技术员说传送数据的XML格式不符合要求,并提供以下xml传送样式:
样式一:
请求消息:
<Request>
<BookedInfos>
<BookedInfo>
<OrdRowID>15239_4</OrdRowID>
<ResourceCode>A34</ResourceCode>
<Resource>彩超一号机器</Resource>
<BookedDate>2009-03-23</BookedDate>
<BookedTime>13:49:59</BookedTime>
<BookedAddress>超生诊断科</ BookedAddress >
<OperatorCode>demo</OperatorCode>
<Operator>demo</Operator>
<NoteInfo>患者有心脏病史</NoteInfo>
<OtherInfo>无</OtherInfo>
</BookedInfo>
</BookedInfos>
</Request>
应答消息:
<Response>
<ResultCode>0</ResultCode>
<ResultContent>成功</ResultContent>
</Response>
样式二:
请求消息:
<Request>
<CardNo>100000220002</CardNo>
<CardType></ CardType >
</Request>
应答消息:
<Request>
<ResultCode>0</ResultCode>
<ResultContent>发送成功</ResultContent>
<PatInfos>
<PatInfo>
<RegNo></RegNo>
<DocumentID></DocumentID>
<PatName></ PatName >
<Age></ Age>
<Sex></Sex>
<CardID></CardID>
<Telephone></Telephone>
<Address></ Address>
<Nation></Nation>
</PatInfo>
</PatInfos>
</Request>
针对这种
XML
传送格式,
axis1.4
是否能实现。如不能实现请问有什么方法可以实现?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用Axis1.4作为Web Service引擎时,处理自定义XML格式的数据主要涉及到如何序列化和反序列化这些数据。对于您提到的两种XML样式,可以通过以下几种方式来实现:
Axis允许你自定义序列化器(Serializer)和反序列化器(Deserializer),以处理特定的XML结构。你可以为每种XML样式创建一个自定义的Handler或DataHandler,来解析和生成符合要求的XML。
org.apache.axis.encoding.Serializer和org.apache.axis.encoding.Deserializer接口。如果XML数据量大或者结构复杂,不便于直接内嵌于SOAP消息体中,可以考虑使用SOAP附件。但这种方式可能需要双方系统都支持SwA规范,并且可能需要对Axis进行相应的配置。
方法:定义Java类来匹配这两种XML结构,然后使用Axis的XMLBeans或JAXB等工具将这些Java对象与XML之间进行转换。这通常涉及编写符合WSDL的Java类,并确保序列化时遵循对方提供的XML模板。
步骤:
如果Axis1.4难以满足需求,可以考虑使用更现代或灵活的Web Service框架,如Apache CXF、Spring Web Services (Spring-WS)等,这些框架提供了更加丰富的定制能力和更好的XML处理能力。
作为一种较为直接但不太优雅的方式,你也可以在Web Service方法内部直接接收和处理XML字符串,然后手动构建符合要求的XML响应。但这通常会增加代码的复杂度和维护难度。
综上所述,虽然直接用Axis1.4处理这种非标准格式的XML可能需要一些额外的工作,但通过上述方法之一,尤其是自定义序列化器/反序列化器或通过自定义Java对象映射,是完全有可能实现的。建议首先尝试前两种方法,因为它们更为标准化且易于维护。