Sınıflarım ve çıktılarımın elimden geldiği kadar basitleştireceğim, ama temelde ne olduğumu bir org.w3c.dom.Element
(bu durumda bir atom bağlantısını temsil eden) JAXB'ye eklemek istiyorum nesne dönüyorum. JAXB Sınıf görünüyor gibi bir şey:RESTeasy/JAXB; Bir <any> etiketinde bir Element'e eklenen ad alanından nasıl kaçınılırım? (JAXB'de <Element> Listesi)
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
import org.w3c.dom.Element;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "People", namespace = "main", propOrder = {
"any",
"persons"
})
public class People {
@XmlAnyElement
protected List<Element> any;
@XmlElement(name = "person", namespace = "main")
protected List<Person> persons;
[...]
}
ben böyle oluşturduğunuz bir şablonu kullanarak Eleman kuruyorum: Bu aslında sınıf neye benzediğini, sadece çalışıyorum değil (
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
public class ElementGen {
public Element getTemplate() throws DOMException, SAXException, ParserConfigurationException {
final SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
final Schema schema = sf.newSchema(new StreamSource(
Thread.currentThread().getContextClassLoader().getResourceAsStream(ATOM_XSD)));
final DocumentBuilderFactory docBuilder = DocumentBuilderFactory.newInstance();
docBuilder.setSchema(schema);
final Document doc = docBuilder.newDocumentBuilder().newDocument();
linkTemplate = doc.createElementNS(ATOM_NAMESPACE, ATOM_LINK);
return linkTemplate;
}
}
Tüm dış karışıklık olmadan test etmek için bir şeyi derlemek mümkün olduğunca kolaylaştırmak için).
Sonra kullanarak bu şablonu klonlamak linkTemplate.cloneNode(false);
Şimdi bu tüm bu xml döndüren çalışır, ama tek şey ben dönene xml ek ad bağlı olmasıdır:
<atom:link xmlns:ns3="main" xmlns="" href="href" rel="rel"/>
I Eğer ad kaybolur ve ben alıyorum: "ns3 xmlns": linkTemplate.setAttribute("xmlns", null);
eklemek
<atom:link xmlns="" href="href" rel="rel"/>
Ama xmlns o çıkarmadan hiçbir yolu var gibi görünüyor = "". Öğeyi yanlış şekilde mi yaratıyorum? Ya da belki başka bir şey yanlış gidiyor? Bunları niçin eklediğine dair bir kayıp yapıyorum, böylece herhangi bir yardım/açıklama takdir edilecektir.
Düzenleme: Ben Eleman oluşturmak için kullanmak belgenin ad ile ilgili olmalıdır inanıyorum ama bunu düzeltmek için ne kadar emin değilim. Belgede (XML) targetNamespace'i ayarlama yolu var mı?
Düzenleme 2: Bu herkes için yararlı bir şey ekler, ancak daha fazla deneme ile ben linkTemplate.setAttribute("xmlns:" + anything, null);
xmlns:[anything]=""
ile bir bağlantı oluşturma ve aksi üretilmiş olan herhangi başkalarını kaldırma etkisi olduğunu bulursa emin değilim.
Düzenleme 3: JAXB nesneleri oluşturmak için kullanılan xsd ilgili bittir:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0"
xmlns="main"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:atom="http://www.w3.org/2005/Atom"
targetNamespace="main"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:complexType name="People">
<xs:sequence>
<xs:any namespace="##other" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="person" type="Person" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
[attributes]
</xs:complexType>
[other types etc.]
Evet, öyle. Ve anladım ki soru yazdıktan sonra ama sonuç maalesef aynı. : \ – Thor84no
Güncellenmiş kodunuzu gönderebilir misiniz? – jtahlborn
Eh. Sadece tam anlamıyla bu. ATOM_LINK şimdi "atom: link" ve setPrefix gitti. Ayrıca bir kök eleman yaratmayı ve bu öğeyi bunun bir çocuk yapmasını da denedim, ama bir şey yapmadı, bu yüzden tekrar kaldırdım. – Thor84no