java.lang.ClassNotFoundException: org.jpos.iso.ISOException

#java #spring #classnotfoundexception #iso8583 #jpos

#java #весна #classnotfoundexception #iso8583 #jpos

Вопрос:

Я новичок в использовании JPOS с ISO8583. В настоящее время я пытаюсь использовать приложение Spring для создания запроса с использованием JPOS, который я хочу отправить в BASE24.

Вот мой код для сборки :

 public class BuildISO {

    public void sentISOMsg(String hostname, int portNumber) {

    // Create Packager based on XML that contain DE type
    GenericPackager packager;
    ASCIIChannel channel;

    try {
        packager = new GenericPackager("packager/iso93ascii.xml");
        channel = new ASCIIChannel(hostname, portNumber, packager);

        ISOMUX isoMux = new ISOMUX(channel) {
            @Override
            protected String getKey(ISOMsg m) throws ISOException {
                return super.getKey(m);
            }
        };

        new Thread(isoMux).start();

        // Create ISO Message
        ISOMsg isoRequest = new ISOMsg(); 
        isoRequest.setMTI("1800");
        isoRequest.set(3, "123456");
        isoRequest.set(7, new SimpleDateFormat("yyyyMMdd").format(new Date()));
        isoRequest.set(11, "000001");
        isoRequest.set(12, new SimpleDateFormat("HHmmss").format(new Date()));
        isoRequest.set(13, new SimpleDateFormat("MMdd").format(new Date()));
        isoRequest.set(48, "Tutorial ISO 8583 Dengan Java");
        isoRequest.set(70, "001");

        ISORequest req = new ISORequest(isoRequest);
        isoMux.queue(req);

        ISOMsg isoReply = req.getResponse(50*1000);

        if (isoReply != null) {
            System.out.println("Req [" new String(isoRequest.pack())   "]");
            System.out.println("Res [" new String(isoReply.pack())   "]");
        }


        // print the DE list
        logISOMsg(isoRequest);

        // Get and print the output result
        byte[] data = isoRequest.pack();
        System.out.println("RESULT : "   new String(data));
    } catch (ISOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

    private static void logISOMsg(ISOMsg msg) {

    System.out.println("----ISO MESSAGE-----");
    try {
        System.out.println("  MTI : "   msg.getMTI());
        for (int i=1;i<=msg.getMaxField();i  ) {
            if (msg.hasField(i)) {
                System.out.println("    Field-" i " : " msg.getString(i));
            }
        }
    } catch (ISOException e) {
        e.printStackTrace();
    } finally {
        System.out.println("--------------------");
    }
}
}
 

и далее, пока я хочу вызвать этот класс здесь :

 public @ResponseBody ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String hostname = request.getParameter("hostname");
    int portNumber = Integer.parseInt(request.getParameter("portNumber"));

    System.out.println("handleRequest... : "   hostname   " : "   portNumber);

    BuildISO buildISO = new BuildISO();
    buildISO.sentISOMsg(hostname, portNumber);

    return null;
}
 

Я получил такую ошибку :

 SEVERE: Servlet.service() for servlet spring threw exception
java.lang.ClassNotFoundException: org.jpos.iso.ISOException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
    at org.sprint.controller.HandleController.handleRequest(HandleController.java:28)
    at org.sprint.controller.HandleController$FastClassByCGLIB$fc3d18c.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.aop.interceptor.CustomizableTraceInterceptor.invokeUnderTrace(CustomizableTraceInterceptor.java:256)
    at org.springframework.aop.interceptor.AbstractTraceInterceptor.invoke(AbstractTraceInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at org.sprint.controller.HandleController$EnhancerByCGLIB$fbdc3830.handleRequest(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:722)
 

Я просмотрел уже заданные вопросы StackOverflow, но не нашел ни одной из ситуаций, в которых изменений в проекте не было. Итак, я чувствую себя очень расстроенным сейчас, потому что я на самом деле НИЧЕГО не изменил, и мой проект перестал работать. Помогите мне, пожалуйста, любые идеи были бы благодарны.

Ответ №1:

Вы должны быть уверены, что у вас есть все jars в ПУТИ к КЛАССУ. В вашем случае это так jpos.jar . И все они (с Spring) должны быть загружены одинаково classloader .

И еще один совет: добавьте -verbose опцию в java (я думаю, Tomcat), чтобы увидеть, откуда загружаются ваши классы.

Комментарии:

1. Извините, но я не могу понять, что «должно быть загружено с тем же загрузчиком классов». Что это значит, сэр? Должен ли я зарегистрировать это jpos.jar (здесь я использую jpos-1.9.0.jar ) в некоторых свойствах? Но я не знаю, что такое свойства. Спасибо за ваш ответ.

2. Этого достаточно, чтобы поместить все ваши банки в WEB-INF/lib

3. Если я использую pom для Maven, должен ли я по-прежнему размещать свою jar в WEB-INF / lib sir? Спасибо за ваш ответ.

4. Да, конечно. Maven это просто инструмент для создания и управления вашим проектом. Но в итоге у вас есть приложение, которое вы отправите клиенту. На его сервере приложений (Tomcat) должны быть все банки, которые вы использовали для создания своего приложения. Вот почему типичный способ разместить все внутри WEB-INF/lib вашего приложения.

5. Ах. Хорошо, сэр. Это поможет мне. Спасибо, сэр.

Ответ №2:

Пожалуйста, добавьте зависимость maven jpos к вашему проекту.

 <dependency>
    <groupId>org.jpos</groupId>
    <artifactId>jpos</artifactId>
    <version>1.9.4</version>
</dependency>
 

Выберите любой из репозиториев, доступных по ссылке maven Maven Repository