Multiple namespace package info Java
Solution 1
You can have two name spaces but not with the same prefix.
Instead of use the annotation into your class, I suggest to add package-info.java
file in the package where your model are.
For example, once I built a sitemap, there I needed to add more namespaces, because of strict checking rules of google search console.
Inside the package-info.java
file I added more namespaces with the following syntax.
@XmlSchema(
xmlns = {
@XmlNs(prefix = "video", namespaceURI = "http://www.google.com/schemas/sitemap-video/1.1"),
@XmlNs(prefix = "", namespaceURI = "http://www.sitemaps.org/schemas/sitemap/0.9")
}
)
/*
* xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
* xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"
*/
package com.example.myapplication.model.sitemap.pojo;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;
Solution 2
You should use an array of annotations instead as per the documentation:
https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/annotation/XmlSchema.html
e.g:
@javax.xml.bind.annotation.XmlSchema (
xmlns = {
@javax.xml.bind.annotation.XmlNs(prefix = "po",
namespaceURI="http://www.example.com/myPO1"),
@javax.xml.bind.annotation.XmlNs(prefix="xs",
namespaceURI="http://www.w3.org/2001/XMLSchema")
}
)
The java documentation does have an erroroneous parentheses at the end of the xmlns block, which I have corrected in the example above.
Kraven
Updated on July 29, 2022Comments
-
Kraven almost 2 years
I have this package info
/** * Created by mflamant on 13/02/2017. */ @javax.xml.bind.annotation.XmlSchema(namespace = "namespace1", xmlns = {@XmlNs(prefix = "ns4", namespaceURI = "namespace1")}, elementFormDefault = XmlNsForm.QUALIFIED) package com.cisco.adt.portal.data.model.API.Equipment; import javax.xml.bind.annotation.XmlNs; import javax.xml.bind.annotation.XmlNsForm;
But I want to have 2 namespaces, but I tried to do this:
/** * Created by mflamant on 13/02/2017. */ @javax.xml.bind.annotation.XmlSchema(namespace = "namespace1", xmlns = {@XmlNs(prefix = "ns4", namespaceURI = "namespace1")}, elementFormDefault = XmlNsForm.QUALIFIED) @javax.xml.bind.annotation.XmlSchema(namespace = "namespace2", xmlns = {@XmlNs(prefix = "ns4", namespaceURI = "namespace2")}, elementFormDefault = XmlNsForm.QUALIFIED) package com.cisco.adt.portal.data.model.API.Equipment; import javax.xml.bind.annotation.XmlNs; import javax.xml.bind.annotation.XmlNsForm;
But I have an error: "Duplicate annotation", is this possible to have 2 namespaces or not ?
Thank You.
-
Kraven about 7 yearsThank you ! This is it !