从POJO生成SOAP XML

时间:2012-01-12 11:48:48

标签: java xml soap

Hello for loging and debuging目的我需要以SOAP XML格式在DB中存储spring bean的输入POJO。你能帮助我使用哪个库吗?你有没有一些代码示例如何从POJO对象创建SOAP XML。我尝试使用javax.xml.soap。*来生成SOAP Envelope,Header和Body,以及用于从POJO生成xml的JAXB。 javax.xml.soap。*工作正常,但我在POJO xml中有命名空间问题。有没有办法自动生成名称空间?例如......

我没有命名空间的输出是

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <z:getClientDetail xmlns:z="my.package">
    <client>
      <adresses>
        <city>Praha</city>
        <houseNumber>1455</houseNumber>
        <street>Hudeckova</street>
      </adresses>
      <adresses>
        <city>Brno</city>
        <houseNumber>44</houseNumber>
        <street>Tupolevova</street>
      </adresses>
      <firstName>Standa</firstName>
      <lastName>Vrana</lastName>
    </client>
 </z:getClientDetail>

但是使用命名空间的正确输出是

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <SOAP-ENV:Body>
    <z:getClientDetail xmlns:z="my.package">
    <java:client xmlns:java="my.package.dto">
    <java:adresses>
      <java:city>Praha</city>
      <java:houseNumber>1455</houseNumber>
      <java:street>Hudeckova</street>
    </java:adresses>
    <java:adresses>
      <java:city>Brno</city>
      <java:houseNumber>44</houseNumber>
      <java:street>Tupolevova</street>
    </java:adresses>
    <java:firstName>Standa</firstName>
    <java:lastName>Vrana</lastName>
   </java:client>
  </z:getClientDetail>

谢谢P。

2 个答案:

答案 0 :(得分:0)

您可以使用包级别注释javax.xml.bind.annotation.XmlSchema来完成此操作。然后,JAXB将从给定命名空间中带注释的包中的pojo生成XML。

如果您愿意,也可以使用javax.xml.bind.annotation.XmlType注释逐个类别地或使用javax.xml.bind.annotation.XmlElement注释逐个字段地执行此操作。

答案 1 :(得分:0)

为什么要以SOAP XML格式在DB中存储数据?

要从POJO对象创建SOAP XML,您可以手动编写所有静态部分,并将所有动态值放在POJO中,如下所示。 例如:

String request = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:tem=\"http://tempuri.org/\">  <soapenv:Header><tem:B2BCode>"+pojo.getPojoObject+"</tem:B2BCode></soapenv:Header></soapenv:Envelope>"