비교연산자는 앞문항의 값을 비교 후 다음문항을 검사한다.

str == null 검사가 뒤에 있을경우 equals 검사를 우선수행하게 되어 NullPointException이 발생하게 된다.


ex)

private void check(String str) {

  if(str == null || str.equals("check") { 

  //if("check".equals(str)) // 이렇게 써주는게 더 효과적이다. 

    throw new Exception();

  } else {

    return;

  }

}



'java' 카테고리의 다른 글

코드 품질 관리  (0) 2014.04.17
Java Apn 샘플코드  (0) 2014.04.14
abstract 와 interface 차이  (0) 2014.03.26
객체를 인자로 보내서 값을 설정하는것  (0) 2014.03.18
Java GCM 샘플 코드  (0) 2014.03.17

공통점은 둘다 파생 클래스의 생산을 위하기 위해 만들어졌다.


abstract 

 -  body 를 구현해야한다.

 - body를 선언하지 않기 위해서는 앞에 abstract 키워드를 붙여야한다.

 - 변수를 미리 선언 가능하다.


interface

 - body를 구현할 필요가 없다. (메소드명, 인자리스트, 반환타입)

 - 변수를 선언하게 될 경우 static final으로 선언이 된다. 

'java' 카테고리의 다른 글

Java Apn 샘플코드  (0) 2014.04.14
if 비교 연산자 우선순위  (0) 2014.04.01
객체를 인자로 보내서 값을 설정하는것  (0) 2014.03.18
Java GCM 샘플 코드  (0) 2014.03.17
jaxb sample code  (0) 2014.03.17

간단한 메모

객체를 인자로 보내서 값을 설정하는것을 앨리어싱(aliasing) 이라고 한다.

용어를 잘 몰랐는데 알아가는 재미가 있네


ex.

public void setUserInfo(User user) {

   user.setName("홍길동");

   user.setAge("30");

   user.setSex("Male");

}

'java' 카테고리의 다른 글

if 비교 연산자 우선순위  (0) 2014.04.01
abstract 와 interface 차이  (0) 2014.03.26
Java GCM 샘플 코드  (0) 2014.03.17
jaxb sample code  (0) 2014.03.17
GCM MismatchSenderId  (0) 2014.03.12

Spring Rest Template 를 활용한 GCM 커넥터 샘플 코드

코드 포인트

 1. Interface부를 따로 분리하지 않음.

 2. RestTemplate 를 활용

 3. GCM 전송


@Component

@Scope("singleton")

public class GcmConnector {


    private Logger logger = LoggerFactory.getLogger(getClass());


    @Value("${google.gcm.url}")

    private String googleGcmUrl;

    @Value("${google.gcm.authToken}")

    private String googleGcmAuthToken;


    public boolean sendMessage(String registrationId, String message) throws Exception {

        StringBuffer postDataBuilder = new StringBuffer();

        postDataBuilder.append("registration_id=" + registrationId); // 등록ID 

        postDataBuilder.append("&collapse_key=1");

        postDataBuilder.append("&delay_while_idle=1");

        try {

            postDataBuilder.append("&data.msg=" + URLEncoder.encode(message, "UTF-8")); //msg


            UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromUriString(googleGcmUrl);


            HttpHeaders httpHeaders = new HttpHeaders();

            httpHeaders.add(org.apache.http.HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded;charset=UTF-8");

            httpHeaders.add(org.apache.http.HttpHeaders.CONTENT_LENGTH, String.valueOf(postDataBuilder.length()));

            httpHeaders.add(org.apache.http.HttpHeaders.AUTHORIZATION, "key=" + googleGcmAuthToken);

            HttpEntity<String> httpEntity = new HttpEntity<String>(postDataBuilder.toString(), httpHeaders);


            new RestTemplate().exchange(uriComponentsBuilder.build().toUri(), HttpMethod.POST, httpEntity, String.class);

            return true;

        } catch (UnsupportedEncodingException e) {

            logger.error("GcmPushConnectorImpl pushRestTemplate faild. cause : " + e.getMessage());

        } catch (HttpClientErrorException e) {

            logger.error("GcmPushConnectorImpl pushRestTemplate faild. cause : " + e.getMessage());

        }

    }

}



'java' 카테고리의 다른 글

abstract 와 interface 차이  (0) 2014.03.26
객체를 인자로 보내서 값을 설정하는것  (0) 2014.03.18
jaxb sample code  (0) 2014.03.17
GCM MismatchSenderId  (0) 2014.03.12
xmpp sasl authentication digest-md5 failed not-authorized  (0) 2014.03.04

    private String convertObjectToXmlStr(Object object) throws Exception {

        StringWriter stringWriter = new StringWriter();

        JAXBContext jaxbContextRequest;

        try {

            jaxbContextRequest = JAXBContext.newInstance(object.getClass());

            Marshaller jaxbMarshaller = jaxbContextRequest.createMarshaller();

            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            jaxbMarshaller.marshal(object, stringWriter);

            String xml = stringWriter.toString();

            return xml;

        } catch (JAXBException e) {

            logger.error("convertObjectToXmlStr faild. cause : " + e.getMessage());


        }

    }


GCM 메시징 구현 중 안드로이드 개발자가 바뀌었다.


서버에 올릴 키를 다르게 지정한다고 지정했더니 계속 401 에러가 나길래 curl로 테스트 해봤더니..


<GCM 테스트 쉘스크립트 - 출처 : 스택 오버플로우>

api_key=$1

reg_id=$2

echo "api_key= $1"

echo "reg_id= $2"


curl --header "Authorization: key=$api_key" --header Content-Type:"application/json" https://android.googleapis.com/gcm/send  -d "{\"registration_ids\":[\"$reg_id\"],\"data\":{\"code\":123}}"

echo

<<>>

MismatchSenderId 가 나는것이다.

안드로이드 쪽에 확인해보니 안드로이드 소스 중에 이런게 있었다.


GCMRegistrar.register(this, SENDER_ID);


즉 RegistraionId를 획득하는건데 SENDER_ID가 이전 담당자 프로젝트의 sender id로 고정되어 있었던 것이다.


얼른 수정 부탁하고 테스트 하니 성공..


교훈은 이해가 부족한채로 사용하면 피본다.. 이틀동안 401만 주구장창 검색했네..

 javax.servlet ~ 관련한 파일이 없다고 컴파일러 에러가 발생할때


프로젝트 우클릭 > Properties > Java Build Path > Library > JRE ~ > Add External Jars


톰캣/lib/servlet-api.jar 선택, 추가




XMPP 서버 구축 후 연결 클라이언트를 생성하여 로그인중에 위와 같은 에러가 발생했다.


원인을 알수없어 헤멨는데 의외의 곳에 복병이 있었다.


userId를 이메일 형식을 사용하면 제목과 같은 에러가 발생한다.


검색해도 잘 나오지 않으니 기억해두자.

'java' 카테고리의 다른 글

jaxb sample code  (0) 2014.03.17
GCM MismatchSenderId  (0) 2014.03.12
자바 정규표현식 필터링 Pattern 사용법 예시  (0) 2014.02.04
TreeSet 을 사용한 List<> 중복 제거  (0) 2014.01.06
죽은 코드 저장  (0) 2013.12.12

#top -d 5 | grep java

5 초 간격으로 java 프로세스 명의 사용량을 출력한다.

프로젝트 생성 시 메이븐 등 기타 설정을 진행하다 보면 SourceFolder가 분리되어서 생기는 에러이다.


간단한 에러이니 간단하게 해결하자.


프로젝트 우클릭 > Properties > Java Build Path > Source > Add Folder


해당 소스 폴더를 Add 해주어 폴더 선언을 해주자.




+ Recent posts