在Jersey XML输出中将XML字符串转换为有效的XML

时间:2011-05-03 19:46:04

标签: java xml rest jaxb jersey

我使用Jersey,Tomcat和Toplink在Java中开发RESTful Web服务。我的一个要求是用我的“客户”服务返回的XML数据中的实际xml数据(由该人员资源链接返回)替换资源链接(人)。为了实现这一点,在调用(GET方法)Customer服务时,我从“Person”资源获取xml输出,并从此xml数据中删除<person></person>标记(因为我的“客户”) “服务具有属性”person“,我想要粘贴此xml数据)并将此xml数据设置在”Customer“资源的”person“属性中。

这是我的输出: 客户服务返回的输出:

<customer>
  <person>http://localhost:8080/xxxx/resources/person/JONESTD</person>
  <xxx>...... </xxx>
  <xxx>...... </xxx>
  ......
  ......
  ......
</customer>

当我使用查询字符串composite = person(要替换时)从Customer服务返回的输出 调用此服务时的人力资源网址和实际数据:

<customer>
  <person><namePrefix>Mr.</namePrefix> <nameFirst>Timothy</nameFirst>   
  <nameLast>Jones</nameLast> <nameMiddle>D.</nameMiddle> <nameSuffix/> 
  <nameDisplayInformal>Timothy D. Jones</nameDisplayInformal> <nameDisplayFormal>Mr. 
  Timothy D. Jones</nameDisplayFormal> <nameSortedInformal>Jones, Timothy   
  D.</nameSortedInformal> <nameSortedFormal>Timothy, Jones D. Mr.</nameSortedFormal> 
  <username>JONESTD</username> <emailAddress>JONESTD@xxxx.xx</emailAddress> </person>
  <xxx>...... </xxx>
  <xxx>...... </xxx>
  ......
  ......
  ......
</customer>

如您所见,我在Customer资源的person属性中设置的XML字符串未正确缩进。如果我查看“查看源代码”,它会显示如下输出:

<customer>
    &lt;namePrefix&gt;Mr.&lt;/namePrefix&gt;    
    &lt;nameFirst&gt;Timothy&lt;/nameFirst&gt;    
    &lt;nameLast&gt;Jones&lt;/nameLast&gt;  &lt;nameMiddle&gt;D.&lt;/nameMiddle&gt;  
    &lt;nameSuffix/&gt;  &lt;nameDisplayInformal&gt;Timothy D. 
    Jones&lt;/nameDisplayInformal&gt;  &lt;nameDisplayFormal&gt;Mr. Timothy D. 
    Jones&lt;/nameDisplayFormal&gt;  &lt;nameSortedInformal&gt;Timothy, Jones 
    D.&lt;/nameSortedInformal&gt;  &lt;nameSortedFormal&gt;Timothy, Jones D. 
    Mr.&lt;/nameSortedFormal&gt;  &lt;username&gt;JONESTD&lt;/username&gt;  
    &lt;emailAddress&gt;JONESTD@xxxx.xx&lt;/emailAddress&gt;
   <xxx>...... </xxx>
   <xxx>...... </xxx>
   .......
   .......
   .......
</customer>

我只在我在“person”属性中设置的人xml字符串中看到此&lt;&gt;。我尝试了几件事(包括StringEscapeUtils.unescapeHtml)将&lt;&gt;转换为<>(正确的xml)。但没有什么对我有用。你能否就我如何解决这个问题给我一些想法?

1 个答案:

答案 0 :(得分:0)

  

为了实现这一点,同时   调用(GET方法)客户   service我从中获取xml输出   “人”资源并删除    和标签   xml数据(自我的“客户”服务以来)   我想要的属性“人”   坚持这个xml数据)并设置它   xml数据在“person”属性中   “客户”资源。

我相信你说你有一个带有String属性的Customer对象来表示XML内容?当您整理此内容时,您将看到添加了转义字符。

  

我正在开发RESTful Web服务   在Java中使用Jersey,Tomcat和   排名靠前的链接。

当你说你正在使用TopLink时,你是oracle.toplink。*类,还是org.eclipse.persistence。*类。如果您正在使用后者(EclipseLink),您将能够利用EclipseLink JAXB(MOXy)来执行您想要的操作。

将XML表示为字符串

在泽西使用MOXy