Fearghal
Fearghal

Reputation: 11427

How to add a jar file to a java rest api project?

I have a very simple REST API which uses jersey 2.x (Glassfish). It works when I do nothing but output hello world string. but when I add a few jars and use them in 1 line of code it throws lots of class java.lang.NoClassDefFoundError errors. I get no compile or syntax errors. The error is very long so excuse me if i posed lots of rubbish in it.

I see lots of solution to this problem, but I don't understand their terminology e.g. your classpath needs to be fixed etc.

Can anybody tell me how to add a jar file which is imported in code?

Code

package com.rest.example;

import java.io.File;

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.core.Response;

    import com.infineon.essence_210.api.Component;
    import com.infineon.essence_210.api.EssenceDBMgr;

    @Path("/testEssence") public class HelloWorld {
        @GET
        @Path("/{param}")
        public Response getMsg(@PathParam("param") String msg){
            String output = "Welcome to the world of Rest : "+msg;

            Component comp = null;
            File file = new File("C:\\MYFILE.xml");
            try {
                          comp = EssenceDBMgr.getInstance().lookupComponent(file); //<---ISSUE HERE!
                } catch (Exception e1) {
                          // TODO Auto-generated catch block
                          e1.printStackTrace();
                } 
            return Response.status(200).entity(output).build(); 
        }

    }

Error in the eclipse console (cut short but ask if you want all)

SEVERE: Servlet.service() for servlet [exampleServlet] in context with path [/RestApi] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: com/sun/xml/bind/marshaller/NamespacePrefixMapper] with root cause java.lang.ClassNotFoundException: com.sun.xml.bind.marshaller.NamespacePrefixMapper at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1320) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1173) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2477) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:880) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1290) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1173) at com.infineon.essence.jaxb.Unmarshaller.unmarshal(Unmarshaller.java:108) at com.infineon.essence.jaxb.Unmarshaller.unmarshal(Unmarshaller.java:88) at com.infineon.essence_210.api.Essence.unmarshal(Essence.java:201) at com.infineon.essence_210.api.Essence.unmarshal(Essence.java:223) at com.infineon.essence_210.api.Essence.unmarshal(Essence.java:229) at com.infineon.essence_210.api.Essence.(Essence.java:80) at com.infineon.essence_210.api.EssenceDBMgr.unmarshal(EssenceDBMgr.java:223) at com.infineon.essence_210.api.EssenceDBMgr.lookupComponent(EssenceDBMgr.java:1331) at com.rest.example.HelloWorld.getMsg(HelloWorld.java:23) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:317) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) at org.glassfish.jersey.internal.Errors.process(Errors.java:315) at org.glassfish.jersey.internal.Errors.process(Errors.java:297) at org.glassfish.jersey.internal.Errors.process(Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:298) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)

Upvotes: 2

Views: 4091

Answers (1)

Lucky
Lucky

Reputation: 17355

You can add the jar to your lib folder of your project. If you want to add the jars to your project simply,

Right click your project > Build path > Configure Build path > Add External jars

Also based on the console message java.lang.NoClassDefFoundError: com/sun/xml/bind/marshaller/NamespacePrefixMapper, you are missing the jaxb-impl-jar file.

And you need to have all the jars right under the lib folder and don't keep it in the subfolders.

Upvotes: 1

Related Questions