Deeply,

Firstly, "Import-Package" section of cxf-api-2.7.1.jar's MANIFEST.MF
needs to be modified in order to use javax.xml.stream package from
org.apache.servicemix.specs.stax-api-1.0-2.1.0.jar rather than system
package,

[Before modification]
Import-Package: ...,javax.xml.stream;version="[0.0,2)",...

[After modification]
Import-Package: ...,javax.xml.stream;version="[1.0.1,2)",...

Secondly, once finishing the above modification and re-launching felix
4.0.3, another similar error happened:

ERROR: Bundle org.apache.cxf.cxf-api [53] Error starting
file:/E:/gfv4/apachedcxf/distribution/multi-bundle/target/cxf-dosgi-ri-multibundle-distribution-1.4-SNAPSHOT-dir/apache-cxf-dosgi-ri-1.4-SNAPSHOT/dosgi_bundles/cxf-api-2.7.1.jar
(org.osgi.framework.BundleException: Uses constraint violation. Unable
to resolve bundle revision org.apache.cxf.cxf-api [53.0] because it is
exposed to package 'javax.xml.stream' from bundle revisions
org.apache.servicemix.specs.stax-api-1.0 [22.0] and
org.apache.felix.framework [0] via two dependency chains.

Chain 1:
  org.apache.cxf.cxf-api [53.0]
    import:
(&(osgi.wiring.package=javax.xml.stream)(version>=1.0.1)(!(version>=2.0.0)))
     |
    export: osgi.wiring.package=javax.xml.stream
  org.apache.servicemix.specs.stax-api-1.0 [22.0]

Chain 2:
  org.apache.cxf.cxf-api [53.0]
    import: (osgi.wiring.package=javax.xml.transform.stax)
     |
    export: osgi.wiring.package=javax.xml.transform.stax;
uses:=javax.xml.stream
    export: osgi.wiring.package=javax.xml.stream
  org.apache.felix.framework [0])

For such a problem, I made a *temp* confirmation/fixing: modify
felix.jar/default.properties

(Because I used jre 1.6)
[Before modification]
jre-1.6=, \
...
 
javax.xml.transform.stax;uses:="javax.xml.stream,javax.xml.transform,javax.xml.stream.events";version="0.0.0.1_006_JavaSE",
\
...

[After modification]
jre-1.6=, \
...
 javax.xml.transform.stax;version="0.0.0.1_006_JavaSE", \
...

Then, re-launching felix 4.0.3, anything is OK.

A point to notice is that before felix 4.0.2, in the above
section(jre-xxx),  javax.xml.transform.stax does not use "uses" clause.

In addition, I think that we should tell user to add some contents into
 conf/config.properties file of the Felix distribution(from 4.0.2)
rather than modifying felix.jar/default.properties because this is an
inner file.

Please confirm what I said above, thanks.

--Tang

Tang Yong wrote:
> Hi Sergey, Christian
> 
> About dcxf multi-bundle distro(my local 1.4 SnapShot) launching, I met a
> big problem as following,
> 
> While launching multi-bundle distro(java -jar bin\felix.jar) using felix
> 4.0.3, the following exception happened on shell,
> 
> ERROR: Bundle org.apache.cxf.cxf-api [53] Error starting
> file:/E:/gfv4/apachedcxf/distribution/multi-bundle/target/cxf-dosgi-ri-multibundle-distribution-1.4-SNAPSHOT-dir/apache-cxf-dosgi-ri-1.4-SNAPSHOT/dosgi_bundles/cxf-api-2.7.1.jar
> (org.osgi.framework.BundleException: Uses constraint violation. Unable
> to resolve bundle revision org.apache.cxf.cxf-api [53.0] because it is
> exposed to package 'javax.xml.stream' from bundle revisions
> org.apache.felix.framework [0] and
> org.apache.servicemix.specs.stax-api-1.0 [22.0] via two dependency chains.
> 
> Chain 1:
>   org.apache.cxf.cxf-api [53.0]
>     import:
> (&(osgi.wiring.package=javax.xml.stream)(version>=0.0.0)(!(version>=2.0.0)))
>      |
>     export: osgi.wiring.package=javax.xml.stream
>   org.apache.felix.framework [0]
> 
> Chain 2:
>   org.apache.cxf.cxf-api [53.0]
>     import: (osgi.wiring.package=com.sun.xml.bind.api)
>      |
>     export: osgi.wiring.package=com.sun.xml.bind.api; uses:=javax.xml.stream
>   org.apache.servicemix.bundles.jaxb-impl [34.0]
>     import:
> (&(osgi.wiring.package=javax.xml.stream)(version>=1.0.0)(!(version>=2.0.0)))
>      |
>     export: osgi.wiring.package=javax.xml.stream
>   org.apache.servicemix.specs.stax-api-1.0 [22.0])
> 
> 【My Analyse】
> I made two confirmations :
> 
> 1 there are two bundles which all exported javax.xml.stream,
> 1) felix.jar
> using org.osgi.framework.system.packages to export javax.xml.stream and
> not specifying concrete package version, so defaultly starting from 0.0
> 
> 2) org.apache.servicemix.specs.stax-api-1.0-2.1.0.jar
> explictly exporting javax.xml.stream and specifying package version
> (version="1.0.1")
> 
> 2 cxf-api-2.7.1.jar imports javax.xml.stream;version="[0.0,2)", and 1)
> and 2) all meet the requirement, so conflict happened.
> 
> In addition, cxf-api-2.7.1.jar is added into multi-bundle distro from
> 1.4, in 1.3 multi-bundle distro, the jar does not exist.
> 
> So, please confirm whether having the same problem or not? If yes, I
> think that the issue should be fixed as soon as possiblie before
> releasing 1.4.
> 
> Thanks
> --Tang
> 


Reply via email to