开发者社区 问答 正文

web service怎样使用定制的xml格式传送数据? 400 报错

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 是否能实现。如不能实现请问有什么方法可以实现?


展开
收起
优选2 2020-06-09 15:28:32 650 分享 版权
阿里云 AI 助理回答

在使用Axis 1.4作为Web Service引擎时,确实可以实现自定义XML格式的数据传输。为了满足对方系统提供的XML样式要求,你可以通过以下几种方式来定制你的Web Service接口以适应这些特定的XML结构:

1. 自定义SOAP消息

Axis允许你通过扩展其基本功能来自定义SOAP消息的内容和结构。你可以创建一个自定义的Handler(处理器)来修改请求和响应的SOAP消息,使其符合对方提供的XML样式。

  • 创建自定义Handler:继承org.apache.axis.handlers.BasicHandler类,并重写handleRequestMessagehandleResponseMessage方法,以便在发送前和接收后修改SOAP消息。
  • 配置Handler:在Axis的server-config.wsdd或通过代码动态部署服务时,将此自定义Handler添加到处理链中。

2. 使用POJO(Plain Old Java Object)并自定义序列化

  • 定义Java Bean:根据对方提供的XML样式,定义相应的Java Bean类,确保类的属性与XML元素对应。
  • 实现序列化逻辑:利用Axis的序列化机制,可能需要自定义序列化器(如通过实现org.apache.axis.encoding.Serializerorg.apache.axis.encoding.Deserializer接口),以控制如何将Java对象转换为特定的XML格式及反之亦然。

3. 考虑使用其他轻量级框架

如果Axis 1.4难以直接满足需求,或者上述方法实施起来过于复杂,也可以考虑使用更现代、灵活的Web Service或RESTful服务框架,比如Apache CXF、Spring Web Services (SWT) 或者直接构建REST API,这些框架通常提供了更加便捷的方式来处理自定义数据格式。

对于样式一和样式二这样的简单XML结构,使用JAX-WS(Java API for XML Web Services)或JAX-RS(Java API for RESTful Web Services)可能会更加直接和高效,特别是如果你对SOAP协议没有硬性要求的话。

4. 直接操作XML

如果只是简单的XML交换,不涉及复杂的Web Service规范,甚至可以考虑不使用Web Service框架,而是直接使用像JAXB(Java Architecture for XML Binding)或DOM/SAX/StAX等XML处理库来生成和解析XML,然后通过HTTP客户端(如Apache HttpClient)进行数据传输。

综上所述,虽然Axis 1.4本身可能需要一些定制工作来完全匹配给定的XML格式,但通过上述方法之一,你应该能够实现所需的功能。考虑到技术的演进,评估是否迁移到更现代的技术栈也是一个值得考虑的选项。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: