2016-09-28 71 views
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:

enter image description here

輸出在Eclipse:

enter image description here

+0

變化框架菲利克斯解決了這個問題。需要了解爲什麼它使用Equinox失敗(karaf.framework = equinox)。 – vetalok

回答

1

添加javax.xml.bind中解決了這個問題:從quinox

karaf/etc/config.properties: 
    org.osgi.framework.bootdelegation = \ 
    javax.xml.bind, \