Skip to content

Commit

Permalink
identified the error: deployed app cannot load file from jar; fixed i…
Browse files Browse the repository at this point in the history
…t locally, time to check for deployed app
  • Loading branch information
RusFortunat committed Nov 13, 2024
1 parent d9b95e7 commit d399d09
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 16 deletions.
101 changes: 101 additions & 0 deletions spring.log
Original file line number Diff line number Diff line change
@@ -1 +1,102 @@
2024-11-13T16:03:24.015+01:00 ERROR 16956 --- [guessNumbersWithAI] [http-nio-8080-exec-3] c.g.controller.ViewController : src\main\resources\net_params_size784_256_10_lr0.001_trainEps1002.txt (The system cannot find the file specified)
2024-11-13T16:14:32.528+01:00 ERROR 4228 --- [guessNumbersWithAI] [http-nio-8080-exec-3] c.g.controller.ViewController : Cannot invoke "java.net.URL.toURI()" because "file_url" is null
2024-11-13T16:16:43.621+01:00 ERROR 24228 --- [guessNumbersWithAI] [http-nio-8080-exec-3] c.g.controller.ViewController : Cannot invoke "java.net.URL.toURI()" because "file_url" is null
2024-11-13T16:18:56.291+01:00 ERROR 7528 --- [guessNumbersWithAI] [http-nio-8080-exec-3] c.g.controller.ViewController : Cannot invoke "java.net.URL.toString()" because the return value of "java.lang.Class.getResource(String)" is null
2024-11-13T16:20:59.696+01:00 ERROR 24780 --- [guessNumbersWithAI] [http-nio-8080-exec-3] c.g.controller.ViewController : Cannot invoke "java.net.URL.toString()" because the return value of "java.lang.Class.getResource(String)" is null
2024-11-13T16:23:46.260+01:00 ERROR 24780 --- [guessNumbersWithAI] [restartedMain] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'viewController': Lookup method resolution failed
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.checkLookupMethods(AutowiredAnnotationBeanPostProcessor.java:498) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:368) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1314) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1209) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.5.jar:3.3.5]
at com.guessNumbersWithAI.GuessNumbersWithAiApplication.main(GuessNumbersWithAiApplication.java:10) ~[classes/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.3.5.jar:3.3.5]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.guessNumbersWithAI.controller.ViewController] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@7d3181ae]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:483) ~[spring-core-6.1.14.jar:6.1.14]
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:320) ~[spring-core-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.checkLookupMethods(AutowiredAnnotationBeanPostProcessor.java:476) ~[spring-beans-6.1.14.jar:6.1.14]
... 22 common frames omitted
Caused by: java.lang.NoClassDefFoundError: com/guessNumbersWithAI/model/NeuralNetwork
at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3578) ~[na:na]
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2676) ~[na:na]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:465) ~[spring-core-6.1.14.jar:6.1.14]
... 24 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.guessNumbersWithAI.model.NeuralNetwork
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:534) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:513) ~[na:na]
at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) ~[spring-boot-devtools-3.3.5.jar:3.3.5]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]
... 28 common frames omitted

2024-11-13T16:26:17.855+01:00 ERROR 24780 --- [guessNumbersWithAI] [restartedMain] o.s.boot.SpringApplication : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'viewController': Lookup method resolution failed
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.checkLookupMethods(AutowiredAnnotationBeanPostProcessor.java:498) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.determineCandidateConstructors(AutowiredAnnotationBeanPostProcessor.java:368) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineConstructorsFromBeanPostProcessors(AbstractAutowireCapableBeanFactory.java:1314) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1209) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.5.jar:3.3.5]
at com.guessNumbersWithAI.GuessNumbersWithAiApplication.main(GuessNumbersWithAiApplication.java:10) ~[classes/:na]
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) ~[spring-boot-devtools-3.3.5.jar:3.3.5]
Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.guessNumbersWithAI.controller.ViewController] from ClassLoader [org.springframework.boot.devtools.restart.classloader.RestartClassLoader@6eb62b20]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:483) ~[spring-core-6.1.14.jar:6.1.14]
at org.springframework.util.ReflectionUtils.doWithLocalMethods(ReflectionUtils.java:320) ~[spring-core-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.checkLookupMethods(AutowiredAnnotationBeanPostProcessor.java:476) ~[spring-beans-6.1.14.jar:6.1.14]
... 22 common frames omitted
Caused by: java.lang.NoClassDefFoundError: com/guessNumbersWithAI/model/NeuralNetwork
at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3578) ~[na:na]
at java.base/java.lang.Class.getDeclaredMethods(Class.java:2676) ~[na:na]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:465) ~[spring-core-6.1.14.jar:6.1.14]
... 24 common frames omitted
Caused by: java.lang.ClassNotFoundException: com.guessNumbersWithAI.model.NeuralNetwork
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]
at java.base/java.lang.Class.forName0(Native Method) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:534) ~[na:na]
at java.base/java.lang.Class.forName(Class.java:513) ~[na:na]
at org.springframework.boot.devtools.restart.classloader.RestartClassLoader.loadClass(RestartClassLoader.java:121) ~[spring-boot-devtools-3.3.5.jar:3.3.5]
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]
... 28 common frames omitted

2024-11-13T16:30:38.361+01:00 ERROR 23460 --- [guessNumbersWithAI] [http-nio-8080-exec-2] c.g.controller.ViewController : Cannot invoke "java.net.URL.toString()" because the return value of "java.lang.Class.getResource(String)" is null
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,25 @@
import com.guessNumbersWithAI.model.NeuralNetwork;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;

import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList;

@Controller
public class ViewController {

@Autowired
ResourceLoader resourceLoader;

Logger logger = LoggerFactory.getLogger(ViewController.class);

@GetMapping("/write-number")
Expand All @@ -30,13 +37,16 @@ public String hangleGetMapping(Model theModel){
return "main-view";
}

@PostMapping("/write-number-result")
@PostMapping("/write-number")
public String hanglePostMapping(@ModelAttribute("NeuralNetwork") NeuralNetwork ourNeuralNetwork,
@ModelAttribute("DrawnImages") DrawnImages drawnImages){

try{
// load network parameters from the file
ourNeuralNetwork.loadNetworkParameters();
Resource resource=resourceLoader.getResource(
"classpath:net_params_size784_256_10_lr0.001_trainEps100.txt");
File file = resource.getFile();
ourNeuralNetwork.loadNetworkParameters(file);

// create input vector by processing raw pixel image data; we turn 280x280 px image into 28x28 px image
double[] inputVector = drawnImages.processRawInput();
Expand Down
18 changes: 5 additions & 13 deletions src/main/java/com/guessNumbersWithAI/model/NeuralNetwork.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@

package com.guessNumbersWithAI.model;

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.Arrays;
import java.util.Scanner;

Expand Down Expand Up @@ -99,19 +102,8 @@ public void forward(double[] input) throws RuntimeException{


// loads the parameters of the chosen network
public void loadNetworkParameters() throws Exception{

// specify filename for the model that user selected
String filename = "src/main/resources/net_params_size784_256_10_lr0.001_trainEps100.txt";
// working on it
/*if(chosenNetworkModel.equals("PyTorch")){
filename = "src/main/resources/PyTorch_params.txt";
}else if(chosenNetworkModel.equals("MyModel")){
filename = "src/main/resources/net_params_size784_256_10_lr0.001_trainEps100.txt";
}*/

// load the file
File networkParamsFile = new File(filename);
public void loadNetworkParameters(File networkParamsFile) throws Exception{

Scanner reader = new Scanner(networkParamsFile);

// read the file data
Expand Down
Binary file modified src/main/resources/image-database.mv.db
Binary file not shown.
2 changes: 1 addition & 1 deletion src/main/resources/templates/main-view.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ <h3>Draw your number here</h3>

<br>

<form th:action="@{/write-number-result}" method="POST">
<form th:action="@{/write-number}" method="POST">

<!-- I'm still working on this feature. There are some problems with properly extracting PyTorch
neural network parameters
Expand Down

0 comments on commit d399d09

Please sign in to comment.