1
在karaf 4.0.3中,XML屬性未通過JAXB進行分析。相同的應用程序與Eclipse內部OSGI容器一起使用,但使用karaf容器失敗。 在這兩種情況下都使用JDK7 JAXB實現。XML屬性未在karaf中分析
任何想法爲什麼會失敗?
傳入XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<responsible version="1.0">
</responsible>
Parse方法:
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new Thread() {
public void run() {
try {
System.out.println("===============================================");
String name = "Responsible-response.xml";
Class<com.log4j2test.pojo.Responsible> baseClass = com.log4j2test.pojo.Responsible.class;
JAXBContext context = JAXBContext.newInstance(baseClass);
Unmarshaller u = context.createUnmarshaller();
final InputStream is = this.getClass().getResourceAsStream(name);
final InputStream is2 = this.getClass().getResourceAsStream(name);
String incomingXml = convertStreamToString(is2);
System.out.println("===Incoming XML: \n" + incomingXml);
StreamSource source = new StreamSource(is);
JAXBElement<?> unmarshaled = u.unmarshal(source, baseClass);
Object po = unmarshaled.getValue();
System.out.println("===Parsed POJO: " + po);
} catch (Throwable e) {
e.printStackTrace();
}
}
}, 5, 5, TimeUnit.SECONDS);
}
的POJO:
@XmlRootElement(name = "responsible")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "responsible", propOrder = { "version" })
public class Responsible {
@XmlAttribute(name = "version")
protected Double version;
public Double getVersion() {
return version;
}
public void setVersion(Double version) {
this.version = version;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("Responsible [");
builder.append("version=");
builder.append(version);
builder.append("]");
return builder.toString();
}
輸出在KARAF:
輸出在Eclipse:
變化框架菲利克斯解決了這個問題。需要了解爲什麼它使用Equinox失敗(karaf.framework = equinox)。 – vetalok