OK, I removed the <Require-Bundle/> tag and the web service provider still works -- thanks. I've incurred a couple more issues, however, I don't know if these are CXF bugs (I'll type up a JIRA if they are) or just "features":

1.) For what I thought, if I *don't* define a etc/org.ops4j.pax.web.cfg file indicating my desired HTTP port the web service will default to port 8080. However, in Karaf 2.3.2 (at least) I'm not able to get the WSDL to appear unless I explicitly create that file with a defined org.osgi.service.http.port value (whether 8040 or 8080 or whatever, the web service will use whatever port I define). Question: Is this a CXF bug, the need to have explicitly create this configuration file even if I just want the default of 8080? (Or maybe Karaf is using another default value? I'm not sure, the Karaf log file just tells me that Pax web has started with no port indication if I don't define that config file.)

2.) My process to install the web service is as follows (works like a charm):

karaf@root> features:addurl mvn:org.apache.cxf.karaf/apache-cxf/2.7.4/xml/features
karaf@root> features:install cxf
karaf@root> install mvn:org.gmazza.blog-samples.web-service-tutorial/web-service-tutorial-service/1.0-SNAPSHOT
Bundle ID: 159
karaf@root> start 159
karaf@root> list
START LEVEL 100 , List Threshold: 50
   ID   State         Blueprint      Spring    Level  Name
[ 135] [Active ] [ ] [ ] [ 80] Apache MINA Core (2.0.5) [ 158] [Active ] [ ] [ ] [ 50] Apache CXF Compatibility Bundle Jar (2.7.4) [ 159] [Active ] [Created ] [ ] [ 80] -- Web Service Provider (1.0.0.SNAPSHOT)

However, for a simple SOAP web service with no security I'm guessing I shouldn't have to install the whole cxf feature (which includes everything) but just cxf-jaxws, as defined in the CXF features file: http://svn.apache.org/viewvc/cxf/trunk/osgi/karaf/features/src/main/resources/features.xml?view=markup

But if I do that I get this error:
karaf@root> features:addurl mvn:org.apache.cxf.karaf/apache-cxf/2.7.4/xml/features
karaf@root> features:install cxf-jaxws
karaf@root> install mvn:org.gmazza.blog-samples.web-service-tutorial/web-service-tutorial-service/1.0-SNAPSHOT
Bundle ID: 104
karaf@root> start 104
Error executing command: Error starting bundles:
Unable to start bundle 104: Unresolved constraint in bundle web-service-tutorial-service [104]: Unable to resolve 104.0: missing requirement [104.0] osgi.wiring.bundle; (osgi.wiring.bundle=org.apache.cxf.bundle)
karaf@root> list
START LEVEL 100 , List Threshold: 50
   ID   State         Blueprint      Level  Name
[ 104] [Installed ] [ ] [ 80] -- Web Service Provider (1.0.0.SNAPSHOT)

Question: Are we always supposed to install the cxf feature regardless of what CXF service we're using (whether REST or SOAP), or is there a bundle missing in the cxf-jaxws feature definition preventing me from using just that for my SOAP service?

Thanks,
Glen


On 04/08/2013 11:35 AM, Daniel Kulp wrote:
On Apr 8, 2013, at 11:26 AM, Glen Mazza <[email protected]> wrote:

Hi, my WSDL-first tutorial provides an option to host the web service provider 
on an OSGi container ( 
http://www.jroller.com/gmazza/entry/web_service_tutorial#WFstep3-service). My 
maven-bundle-plugin configuration in the service's pom.xml (which works fine) 
is as follows:

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <configuration>
     <instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Require-Bundle>org.apache.cxf.bundle,org.springframework.beans</Require-Bundle>
        <Export-Package>service</Export-Package>
     </instructions>
  </configuration>
</plugin>

Question though, I don't know if I should be using a more granular bundle than the 
"org.apache.cxf.bundle" listed above -- I can't find a sample using something different, 
but IIRC CXF had/has a huge deprecated OSGi bundle that included everything, I'm unsure if 
"org.apache.cxf.bundle" is referring to that super-bundle, and hence I should be using 
something else today.
With "modern" CXF usage, you shouldn't need the Require-Bundle stuff there at 
all, especially if you flip to using Blueprint instead of Spring.


Another question:  What object in the CXF source code is "org.apache.cxf.bundle" precisely referring to -- I can't 
find it within the CXF features file ( 
http://svn.apache.org/viewvc/cxf/trunk/osgi/karaf/features/src/main/resources/features.xml?view=markup) and a <grep -r 
"org.apache.cxf.bundle" . --include "pom.xml"> from the CXF trunk is returning nothing.  Stated 
another way, if the CXF team wanted to change the name of the require-bundle to "org.apache.cxf.bundle.banana", 
which pom.xml file (or other file?) in the CXF source would need to be changed to accomplish that?
Well, it's actually one of two bundles depending on the environment:

osgi/bundle/all  - the big massive bundle from the <=2.5.x days.    
<bundle.symbolic.name>${project.groupId}.bundle</bundle.symbolic.name>

or:

osgi/bundle/compatible - for >=2.6.x, this is a tiny bundle named the same as 
the big bundle designed to provide some level of compatibility with the older big 
bundle by providing a bundle with the same name (so the Require-Bundle works).

In any case, for modern usage, I'd recommend removing the Require-Bundle 
entirely and let the maven bundle plugin do it's thing properly.


Hope that helps!
Dan




Thanks,
Glen


--
Glen Mazza
http://www.jroller.com/gmazza/
Twitter: glenmazza



--
Glen Mazza
http://www.jroller.com/gmazza/
Twitter: glenmazza

Reply via email to