Select 한 결과를 resultClass 에 매핑할때 오류가 발생한다.
 
1. resultClass="java.util.Map"  으로 사용한경우
    resultClass="java.util.HashMap" 으로 변경해주면 해결됨
    Map은 인터페이스라 객체성성이 안되서 발생
 
2. 임의로 만든 Class 에서 발생한 경우
    생성자가 없어서 발생
 
발생한 Class 예제
@Setter
@Getter
@Builder
public class PersonDto  {
     private int age;
     private String name;
}
 
@NoArgsConstructor
@AllArgsConstructor​
를 추가 하면  해결됨
반응형
1. 의존성 추가
<dependency>
    	<groupId>javax.mail</groupId>
    	<artifactId>javax.mail-api</artifactId>
   	<version>1.6.2</version>
</dependency>
<dependency>
	<groupId>com.sun.mail</groupId>
	<artifactId>javax.mail</artifactId>
	<version>1.6.2</version>
</dependency>

 

2. 샘플코드 

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class EmailSender {

    // 구글 이메일
    static final String user_email= "XXXXX@gmail.com";
    // 구글 비번
    static final String user_pw = "XXXXX";
    
    static final String smtp_host = "smtp.gmail.com";
    static final int smtp_port = 465;  // TLS : 587, SSL : 465

    public static void Send() throws Exception {
        Properties props = System.getProperties();
        props.put("mail.smtp.host", smtp_host); 
        props.put("mail.smtp.port", smtp_port); 
        props.put("mail.smtp.auth", "true"); 
        props.put("mail.smtp.ssl.enable", "true"); 
        props.put("mail.smtp.ssl.trust", smtp_host);
        
        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(user_email, user_pw);
                    }
                });
        
        try {

            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(user_email));

           // 받는 이메일
            message.setRecipients(
                    Message.RecipientType.TO,
                    InternetAddress.parse("XXXXX@gmail.com, XXXXX@naver.com")    
            );
	
	  // 제목
            message.setSubject("테스트 메일입니다."); 
	  
	   // 내용
            message.setText("이것은 테스트 메일입니다. \n\n 잘 갔나요?");

            // 발송
            Transport.send(message);
            
        } catch (MessagingException e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        }
    }
}

위 코드를 실행했더니 

Application-specific password required

오류가 발생한다.

구글링 해보니 2차인증 설정시 발생하는 오류라고 함

해결방법은  구글 보안탭에서  앱 비밀번호를 생성해서 사용하면 된다.
 
3. 앱 비밀번호 만들고 사용하기
1) 구글계정으로 이동 (https://myaccount.google.com/)
2) 보안  선택

 

3) 2단계 인증 선택

4) 맨밑에 앱 비밀번호 선택

5) 앱 선택 : 메일, 기기 선택 : windows 컴퓨터, 생성 클릭 하면 16자리 비밀번호가 생성된다.

 

6) 생성된 비밀번호를 user_pw 로 사용하면 메일 잘 발송된다.

 

 

 

 

반응형
jsoup 으로 json, xml 결과 페이지를 호출하면
Unhandled content type. Must be text/*, application/xml, or application/*+xml 
오류가 발생함
 
해결방법은
.ignoreContentType(true)  설정하면 됨
 
Jsoup.connect("/test.json")
  	.ignoreContentType(true)
  	.method(Method.GET)
  	.execute();

혹은 header에 ContentType 을 json이나 xml 로 지정해도 될 듯.

 

끝.

반응형

 

1. json-simple  의존성 추가

<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1</version>
</dependency>
 

 

2.  샘플 코드
String jsonText = "{ \"test\" : \"1234\" }";
JSONParser parser = new JSONParser();
Object obj = parser.parse(jsonText);
JSONObject jsonObj = (JSONObject) obj;
String testValue = jsonObj.get("test").toString();
System.out.println("testValue : " + testValue);
// 결과
testValue : 1234

 

반응형

 

의존성 추가한 라이브러리가 안 받아지는 오류가 발생함.
라이브러리가 없으니 다양한 오류가 발생함.
아무리 clean 하고 maven update project 해도 해결이 안됨.
프로젝트를 새로 받아서 해도 안됨.
pom.xml repository를 변경해도 암됨.
원인은 repository 캐시 때문이었음
 
아티팩트 (또는 전체 로컬 저장소)를 c:\Users\<username>\.m2\repository  직접 삭제하고
다시 maven install해보니 제대로 받아온다.
 
끝.

 

반응형
@Builder  사용 시 SQL query 의 필드 순서와
데이터 모델의 필드 순서가 다를떄 발생함.
 
해결 방법은  인수가 없는 생성자를 추가하면됨
 
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DataModel {
.
.
.
}
 
반응형

http://www.rgagnon.com/javadetails/java-0593.html

유용한 팁이네요. 다른 운영체제는 또 다른 방법을 찾아야겠지만 ^^;

The Microsoft TASKLIST.EXE is used to dump the list of the currently running processes. It is similar to tasklist window but for the console.

From a Java program, we are launching TASKLIST.EXE and capture its output.

Note : TASKLIST.EXE is not included the HOME edition of XP. But you can download it from Web, for example : http://www.computerhope.com/download/winxp.htm.

import java.io.*;
import java.util.*;

public class WindowsUtils {
  public static List<String> listRunningProcesses() {
    List<String> processes = new ArrayList<String>();
    try {
      String line;
      Process p = Runtime.getRuntime().exec("tasklist.exe /fo csv /nh");
      BufferedReader input = new BufferedReader
          (new InputStreamReader(p.getInputStream()));
      while ((line = input.readLine()) != null) {
          if (!line.trim().equals("")) {
              // keep only the process name
              line = line.substring(1);
              processes.add(line.substring(0, line.indexOf(""")));
          }

      }
      input.close();
    }
    catch (Exception err) {
      err.printStackTrace();
    }
    return processes;
  }

  public static void main(String[] args){
      List<String> processes = listRunningProcesses();
      String result = "";

      // display the result 
      Iterator<String> it = processes.iterator();
      int i = 0;
      while (it.hasNext()) {
         result += it.next() +",";
         i++;
         if (i==10) {
             result += "\n";
             i = 0;
         }
      }
      msgBox("Running processes : " + result);
  }

  public static void msgBox(String msg) {
    javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
       null, msg, "WindowsUtils", javax.swing.JOptionPane.DEFAULT_OPTION);
  }
}

출처 : http://kogaeng.tistory.com/306

반응형

자바프로그램(Java Application)을 실행시켜 주는 명령어이다.


사용법:java <options> <classfiles> <argument> 또는
java <options> -jar file.jar <argument>

options: 옵션
classfiles: 호출될 클래스 파일 이름
file.jar: 호출될 jar파일 이름
argument:main함수에 파라미터로 보내질 문자열


예를들어, main함수를 포함하는 Hello.class 파일이 존재할경우,
java Hello 로 프로그램을 실행시킬수 있는데, 확장자인 class는 생략할수 있지만,
대소문자는 구별하므로, 정확하게 기입해야 한다.
java Hello Greeting 처럼 Greeting을 덧붙일경우, main함수에 문자열인자로 Greeting을 보낼수 있다.

a) -client:
자바 HotSpot Client VM을 선택한다. (디폴트 값이다)

b) -server:
자바 HotSpot Server VM을 선택한다.

c) -classpath (-cp):
참조할 클래스 파일 패스를 지정하는데, jar파일, zip파일, 클래스파일의 디렉터리 위치를 기술한다.
각 클래스파일 패스는 콜론(:)을 통해서, 분리시켜 기술한다
자바VM은 자바프로그램을 로딩시, -classpath로 지정된 클래스 패스나, java플래폼이 설치된, 운영체제에서의
환경변수로 지정된, 클래스패스를 통해서, 클래스 파일들을 참조하게 된다.

d) -D <property name>=<property value>:
시스템의 property 값을 설정한다.

ex) java -Djava.library.path=. HelloWorld

자바의 시스템 property(속성)중 "java.library.path"값을 "." (현재디렉터리)로 지정해서, HelloWorld 실행시켜라는 의미 이다.

위와같이 자바VM에 지정된 속성을 실행시 -D옵션을 사용해서, 변경, 지정할수 있다.

e) -jar 파일이름:

jar파일로 압축되어져 있는 자바 프로그램을 실행시킨다.

클래스 파일이름 대신 jar파일을 사용해서, 압축되어져 있는 자바 프로그램을 실행시킬수 있는데, 위프로그램이 제대로 실행되어지기 위해서, Jar파일안의 manifest라는 텍스트 파일에 Main-Class:classname 같은 형태의 텍스트 라인이 포함되어 있어야 한다.

그리고, 여기에 기술된 classname은 main함수를 포함하고 있는 클래스 이름이 되어야 한다.

f) -verbose:

자바프로그램 실행되어지는 정보를 화면에 출력해준다.

-verbose:class

로딩되어지는 각클래스들의 정보를 화면에 출력한다.

-verbose:gc

garbage collection 이벤트를 화면에 출력한다.

-verbose:jni

native 함수들과 다른 자바 native 인터페이스 사용에 대한 정보를 출력한다

g) -version:

현재 JVM의 버젼 정보만 출력한다

h) -showversion:

현재 JVM의 버젼정보를 출력한다.

java -showversion HelloWolrd

와 같이 자바 프로그램을 실행시키면서, 자바 버젼정보를 출력할수 있다.

i) -X

비표준 자바옵션 리스트를 화면에 출력해준다.

i-1) -Xms, -Xmx

자바를 구동시, JVM이 사용가능한 최대 메모리 사이즈를 변경합니다.

JVM이 자바프로그램을 구동하기 위해, 초기설정된 메모리사이즈는 64M입니다.

사용방법은 다음과 같습니다

java -Xms <초기힙사이즈> -Xmx <최대힙사이즈>

예를들어, Hello.class 자바 프로그램을 시작시, 256M(메가)의 힙사이즈를 할당하며, 최대 512M의 힙사이즈를 할당받고 싶다면, 다음과같이 합니다.

java -Xms256m -Xmx512m Hello



반응형

+ Recent posts