开发者社区 问答 正文

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


展开
收起
爱吃鱼的程序员 2020-05-31 13:02:02 530 分享 版权
阿里云 AI 助理回答

在使用Axis1.4作为Web Service引擎时,处理自定义XML格式的数据主要涉及到如何序列化和反序列化这些数据。对于您提到的两种XML样式,可以通过以下几种方式来实现:

1. 扩展Axis的序列化器/反序列化器

Axis允许你自定义序列化器(Serializer)和反序列化器(Deserializer),以处理特定的XML结构。你可以为每种XML样式创建一个自定义的Handler或DataHandler,来解析和生成符合要求的XML。

  • 步骤
    • 实现org.apache.axis.encoding.Serializerorg.apache.axis.encoding.Deserializer接口。
    • 注册你的自定义序列化器和反序列化器到Axis的类型映射中,这样Axis就能识别并使用它们来处理特定的数据类型。

2. 使用SOAP附件(SwA, SOAP with Attachments)

如果XML数据量大或者结构复杂,不便于直接内嵌于SOAP消息体中,可以考虑使用SOAP附件。但这种方式可能需要双方系统都支持SwA规范,并且可能需要对Axis进行相应的配置。

3. 通过自定义Java对象映射

  • 方法:定义Java类来匹配这两种XML结构,然后使用Axis的XMLBeans或JAXB等工具将这些Java对象与XML之间进行转换。这通常涉及编写符合WSDL的Java类,并确保序列化时遵循对方提供的XML模板。

  • 步骤

    • 定义Java Bean类,其属性对应XML中的元素。
    • 使用Axis的wsdl2java工具生成客户端和服务端代码时,指定合适的绑定选项(如xmlbeans、jaxb等)来确保生成的代码能够正确处理这些自定义对象。
    • 在服务端,接收Java对象后,手动构造或使用框架自动转换成所需的XML格式输出。

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

如果Axis1.4难以满足需求,可以考虑使用更现代或灵活的Web Service框架,如Apache CXF、Spring Web Services (Spring-WS)等,这些框架提供了更加丰富的定制能力和更好的XML处理能力。

5. 直接操作XML字符串

作为一种较为直接但不太优雅的方式,你也可以在Web Service方法内部直接接收和处理XML字符串,然后手动构建符合要求的XML响应。但这通常会增加代码的复杂度和维护难度。

综上所述,虽然直接用Axis1.4处理这种非标准格式的XML可能需要一些额外的工作,但通过上述方法之一,尤其是自定义序列化器/反序列化器或通过自定义Java对象映射,是完全有可能实现的。建议首先尝试前两种方法,因为它们更为标准化且易于维护。

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