Search code examples
javaweb-servicescxfjbossfuse

project cxf installed on JBoss Fuse but still "no services have been found"


I'm trying to learn how to make a REST service with cxf and JBoss Fuse. After the successful installation of the service on the server, I try to see the list of the installed cxf services on http://localhost:8181/cxf, getting the expression "No services have been found". Some one know why no services didn't show up and how can I show it? The code that I'm using as test is the one in this tutorial https://www.tutorialspoint.com/jboss_fuse/jboss_fuse_rest_web_services.htm, starting from the maven project org.apache.cxf cxf-http-basic

Edit 1: After following the helpful rewrite guide of Abolfazl I installed and started again the service. This time doing osgi:list I get

[ 320] [Active     ] [Failure     ] [       ] [   80] mvn:com.tuts.abhinav/rest-service/1.0-SNAPSHOT

While doing log:display I get

2017-05-23 09:44:36,969 | ERROR | l Console Thread | BlueprintContainerImpl           | 23 - org.apache.aries.blueprint.core - 1.4.5 | Unable to start blueprint container for bundle null/0.0.0
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)[:1.8.0_121]
    at java.util.ArrayList.get(ArrayList.java:429)[:1.8.0_121]
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.readDirectives(BlueprintContainerImpl.java:214)
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:296)
    at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:270)
    at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:294)
    at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:263)
    at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:253)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
    at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
    at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1127)
    at org.apache.felix.framework.util.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:696)
    at org.apache.felix.framework.util.EventDispatcher.fireBundleEvent(EventDispatcher.java:484)
    at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4429)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2100)
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:976)
    at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:963)
    at org.apache.karaf.shell.osgi.StartBundle.doExecute(StartBundle.java:37)
    at org.apache.karaf.shell.osgi.BundlesCommand.doExecute(BundlesCommand.java:37)
    at org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:38)
    at org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_121]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_121]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_121]
    at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_121]
    at org.apache.aries.proxy.impl.ProxyHandler$1.invoke(ProxyHandler.java:54)[19:org.apache.aries.proxy.impl:1.0.5]
    at org.apache.aries.proxy.impl.ProxyHandler.invoke(ProxyHandler.java:119)[19:org.apache.aries.proxy.impl:1.0.5]
    at org.apache.karaf.shell.console.commands.$BlueprintCommand417451938.execute(Unknown Source)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.CommandProxy.execute(CommandProxy.java:78)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Closure.executeCmd(Closure.java:477)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Closure.executeStatement(Closure.java:403)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Pipe.run(Pipe.java:108)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:183)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.Closure.execute(Closure.java:120)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.felix.gogo.runtime.CommandSessionImpl.execute(CommandSessionImpl.java:92)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.karaf.shell.console.jline.Console.run(Console.java:197)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]
    at org.apache.karaf.shell.console.jline.DelayedStarted.run(DelayedStarted.java:79)[38:org.apache.karaf.shell.console:2.4.0.redhat-630187]

Solution

  • Above sample need some corrections as following:

    1-In "Add Fuse Plugin Repositories" section in last line of the code, "<pluginRepositories>" must replace with </pluginRepositories>.

    2-In "Add Build Instruction" section at line 6 of the code, "artifalctId" must replaces with "artifactId".

    Correct steps for create and deploy above sample are as following:

    1-Create a simple Maven quick-start project with following command:

    mvn archetype:generate -DgroupId=com.tuts.abhinav -DartifactId=rest-service -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    

    2-Change project structure until you have following structure: Project Structure

    3-"UserService.java" class must have following content:

    package com.tuts;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("/UserService_1")
    public class UserService {
       @GET
       @Path("/get_data")
       @Produces(MediaType.APPLICATION_JSON)
    
       public String getUser() {
          String reponse = "This is standard response from REST";
          return reponse;
       }
    }
    

    4-"blueprint.xml" file should have following content:

    <?xml version="1.0" encoding="UTF-8"?>
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
    xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0     http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd    http://cxf.apache.org/blueprint/jaxrs     http://cxf.apache.org/schemas/blueprint/jaxrs.xsd">
        <jaxrs:server address="/users" id="service">
            <jaxrs:serviceBeans>
                <ref component-id="userService"/>
            </jaxrs:serviceBeans>
        </jaxrs:server>
        <bean class="com.tuts.UserService" id="userService"/>
    </blueprint>
    

    5-"pom.xml" file should have following content:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.tuts.abhinav</groupId>
    <artifactId>rest-service</artifactId>
    <packaging>bundle</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>rest-service</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>org.apache.servicemix.specs</groupId>
            <artifactId>org.apache.servicemix.specs.jsr311-api-1.1.1</artifactId>
            <version>1.9.0</version>
            <scope>provided</scope>
        </dependency>
    
        <dependency>
            <groupId>org.apache.servicemix</groupId>
            <artifactId>servicemix-http</artifactId>
            <version>2013.01</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>3.0.2</version>
        </dependency>
    
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
    </dependencies>
    
    <repositories>
        <repository>
            <id>fusesource.m2</id>
            <name>FuseSource Community Release Repository</name>
            <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
    
            <releases>
                <enabled>true</enabled>
            </releases>
    
        </repository>
    
        <repository>
            <id>fusesource.ea</id>
            <name>FuseSource Community Early Access Release Repository</name>
            <url>http://repo.fusesource.com/nexus/content/groups/ea</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    
    </repositories>
    
    <pluginRepositories>
        <pluginRepository>
            <id>fusesource.m2</id>
            <name>FuseSource Community Release Repository</name>
            <url>http://repo.fusesource.com/nexus/content/repositories/releases</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
    
            <releases>
                <enabled>true</enabled>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    <build>
        <defaultGoal>install</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.3.4</version>
                <extensions>true</extensions>
    
                <configuration>
                    <instructions>
                        <Bundle-SymbolicName>rest-example-database-post-method
                        </Bundle-SymbolicName>
                        <Import-Package>* </Import-Package>
                    </instructions>
                </configuration>
    
            </plugin>
        </plugins>
    </build>
    

    6-You can install project with following command:

    mvn install
    

    7-Finally, you can deploy project bundle in karaf with following command:

    osgi:install -s mvn:com.tuts.abhinav/rest-service/1.0-SNAPSHOT
    

    After that your service must available at http://localhost:8181/cxf url: