gpt4 book ai didi

Java WS : how to build a ElementNSImpl from a model object?

转载 作者:行者123 更新时间:2023-12-02 03:20:14 24 4
gpt4 key购买 nike

我有一个应用程序,它是一个使用 java JWS 完成的 WS 调度程序,它可以获取 ws 请愿,选择必须调用的 ws,调用它,获取响应,解析并将其返回给客户端。

为此,我有一个 XML,其中一部分包含与我的服务相关的信息,另一部分包含必须调用的服务的特定信息,因此可能有 2 个不同的调用:

<petition>
<generic><servicename>ws1</servicename></generic>
<especific>.... whatever....</especific>
</petition>

<petition>
<generic><servicename>ws2</servicename></generic>
<especific>.... whatever needed for ws3....</especific>
</petition>

以及他们的返回;

<return>
<generic><servicename>ws1</servicename></generic>
<specific><city>bilbao</city></specific>
</return>


<return>
<generic><servicename>ws2</servicename></generic>
<specific>
<person>
<name>Olof</name>
</person>
</specific>
</return>

为此,我在模型的“特定”字段中使用了标签 @XmlAnyElement(lax=false) (在请愿书和响应中),因此,在我的服务中,我将所有调用作为“请愿书” ' 里面有一些东西(特定部分)不会被 JWS 解析;我将在使用编码器调用的每个服务的特定部分中解析它,并让他知道必须使用哪个特定模型:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {})
@XmlRootElement(name = "petition")
public class Petition{
....
@XmlAnyElement(lax=false)
private Object specific;
....
}

(Same for the response object.)

当我从调用的服务中获取对象并将其作为“特定”字段中的 ElementNSImpl 对象直接返回时,这种方法效果很好,但通常我必须解析它(通常我返回的特定对象并不相同)返回给我的对象的类型),但我无法做到这一点。

在这种情况下,我必须创建一个新对象(从我想要返回的类型),用我获得的信息填充它并将其返回给我的客户端。好吧,我这样做了,我在其中构建了一个“响应”设置,即服务的特定数据对象,并尝试返回它,但随后 WS 没有向客户端返回任何内容(长度为 0 的 200 HTTP 响应)...

此外,如果我手动将响应的“特定”部分设置为“null”,则对象会得到很好的编码,并且我的客户会收到:

<response>
<generic><servicename>ws2</servicename></generic>
</response>

所以我认为它正在等待“ElementNSImpl”,但我不知道如何从带有 JAXB 注释的对象构建它。

最佳答案

好吧,我现在还没有处于最好的状态:

ElementNSImpl 显然是 Element 的实现,因此唯一要做的就是将对象编码到元素并在“lax=false”中返回它。

这个方法可以做到:

public Element marshallToElement(Object specific, Class clazz) throws JAXBException{
DOMResult res = null;
JAXBContext ctx = JAXBContext.newInstance(clazz);
Marshaller marshaller = ctx.createMarshaller();
res = new DOMResult();
marshaller.marshal(specific, res);
return ((Document)res.getNode()).getDocumentElement();
}

这样我就可以在对不同服务的每次不同调用中调用它,并且在那里,我将知道必须使用哪个特定类。

关于Java WS : how to build a ElementNSImpl from a model object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39719211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com