Java 来自XML的Jaxb字符串

Java 来自XML的Jaxb字符串,java,xml,string,jaxb,unmarshalling,Java,Xml,String,Jaxb,Unmarshalling,使用Jaxb解组器,我无法实现将XML内容作为字符串加载 下面是我正在努力实现的一个运行示例 public static class BarAdapter extends XmlAdapter<Object, String> { @Override public Object marshal(String v) throws Exception { return null; } @Override public String

使用Jaxb解组器,我无法实现将XML内容作为字符串加载

下面是我正在努力实现的一个运行示例

public static class BarAdapter extends XmlAdapter<Object, String> {
    @Override
    public Object marshal(String v) throws Exception {
        return null;
    }

    @Override
    public String unmarshal(Object v) throws Exception {
        return null; // what to do with the ElementNsImpl??
    }

}

@XmlAccessorType(XmlAccessType.FIELD)
public static class Container implements Serializable {

    @XmlAnyElement
    @XmlJavaTypeAdapter(BarAdapter.class)
    private String bar;

    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }
}

public static void main(String[] args) throws Exception {
    JAXBContext jaxbContext = JAXBContext.newInstance(Container.class);
    String xml = "<foo><bar><name>Barry</name><surName>White</surName></bar></foo>";
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    InputStream is = new ByteArrayInputStream(xml.getBytes());
    JAXBElement<Container> barWrapperElement = unmarshaller.unmarshal(new StreamSource(is), Container.class);
    Container container = barWrapperElement.getValue();

    System.out.println(container.getBar());
}
公共静态类BarAdapter扩展了XmlAdapter{
@凌驾
公共对象封送处理(字符串v)引发异常{
返回null;
}
@凌驾
公共字符串解组器(对象v)引发异常{
return null;//如何处理ElementNsImpl??
}
}
@XmlAccessorType(XmlAccessType.FIELD)
公共静态类容器实现了可序列化{
@XmlAnyElement
@XmlJavaTypeAdapter(BarAdapter.class)
私人弦杆;
公共字符串getBar(){
返回杆;
}
公共空心立根杆(弦杆){
这个.bar=bar;
}
}
公共静态void main(字符串[]args)引发异常{
JAXBContext JAXBContext=JAXBContext.newInstance(Container.class);
字符串xml=“BarryWhite”;
Unmarshaller Unmarshaller=jaxbContext.createUnmarshaller();
InputStream is=newbytearrayinputstream(xml.getBytes());
JAXBElement barWrapperElement=unmarshaller.unmarshal(新的StreamSource(is),Container.class);
容器容器=barWrapperElement.getValue();
System.out.println(container.getBar());
}
我想进入酒吧:
BarryWhite

我试图使用
@xmlanyement
,但它提供了一个
ElementNsImpl
,我需要一个
字符串

如果您有更好的解决方案,请发布。我觉得我做得不对。 我可以将
ElementNsImpl
转换为
字符串
。 因此:


你的问题很相似,这是一个完全不同的问题。在您提到的帖子中,我试图在不知道根名称的情况下解组XML。不过,在这里,我试图使用XmlAdapter将任何XML解组为字符串。唯一常见的是示例类。
@Override
public String unmarshal(Object obj) throws Exception {
   // Be careful, affect a new string writer has to be done within your
   // unmarshaller. If you do this here, it will partially unmarshall. 
   // I can povide more code upon request
   StringWriter stringWriter = new StringWriter();

   TransformerFactory transformerFactory = TransformerFactory.newInstance();
   Transformer transformer = transformerFactory.newTransformer();
   
   Document document = ((Element) obj).getOwnerDocument();
   transformer .transform(new DOMSource(document), new StreamResult(stringWriter));

   return stringWriter.toString();
}