You may find the release notes for each of the components linked above.
Other than a few new features listed in the release notes, there are many bug fixes in this release.
Many of these bugs /feature enhancement requirements were led from the discussions in Metro forum and filed by external users. This improves significantly the quality and usability of Metro.
이제는 클라이언트 쪽 소스를 만들어서 테스트를 해봐야겠죠?
build.xml 의 generate-WorkflowFormWebServicetarget 을 실행시키면 클라이언트 소스가 jar로 묶여서 나옵니다.
jar 를 풀어서 보면 아래와 같은 파일들이 있습니다. 저기 아래보이는 WorkflowFormWebService 가 serviceInterface 입니다.
위에 있는 wsdl 파일을 참조하여 아래 내용을 채워 넣습니다.
클라이언트 소스 테스트는 아래와 같이...
별도의 테스트 소스를 만들어서 올리고 싶지만 시간이 없는 관계로 이렇게 되었습니다.
나중에 시간이 되면 스크린캐스트로다가 샤샥...
The wsimport tool generates JAX-WS portable artifacts used in JAX-WS clients and services. The tool reads a WSDL and generates all the required artifacts for web service development, deployment, and invocation.
wsgen
The wsgen tool reads a service endpoint implementation class and generates all of the portable artifacts for a JAX-WS web service..
Apt
The apt tool provides a facility for programmatically processing the annotations added to Java by JSR 175, Metadata Facility for the JavaTMProgramming Language. In brief, JSR 175 allows programmers to declare new kinds of structured modifiers that can be associated with program elements, fields, methods, classes, etc.
The apt tool generates the portable artifacts used in JAX-WS services.
쉽게 Java Beans ↔ XML 처리를 할 수 있는 JAXB 라이브러리를 통해서 java.util.Map 의 구현체 (HashMap)을
XML 화 처리하려고 하였습니다.
1차적으로 그냥 HashMap 형식으로 Marshaller 를 만들어서 처리를 하였으나...
결과는
javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.internal.SAXException2: unable to marshal type "java.util.HashMap" as an element because it is missing an @XmlRootElement annotation]
ㅁ getDeclaredXXXXX() - 위 메소드들은 상속받은 것들도 반환하지만 이런 메소드들은 해당 클래스 소스에 정의된 것들만 반환합니다. 예를 들어 getField 로는 private 프로퍼티를 가지고 올 수 없지마녀 getDeclaredField 로는 private 프로퍼티에 접근할 수 있습니다. (이거 찾느라 쪼끔 고생을...)
java.lang.reflect.Method 메소드 클래스 입니다.
ㅁ getModifires() - 메소드의 접근 지정자를 반환 (private, protected, public ...)
ㅁ getParameterTypes() - 메소드 파라미터의 타입을 반환합니다.
ㅁ ★★ invoke(Object obj, Object... args) - 메소드를 실행시킵니다. 첫번째인자는 실행을 할 객체를 넘겨주고 두번째 인자부터는 메소드의 파라미터를 주르륵... 제일 중요한 메소드죠 ㅋㅋㅋ
java.lang.reflect.Field ... 설명은 따로 안해도..
ㅁ get(Object obj) - public 프로퍼티의 값을 가지고 올 때 사용합니다. 접근만 할 수 있다면 프로퍼티 값을 얻어올 수 있습니다.
위의 메소드들만 알고 있어도 어노테이션 가지고 노는데는 충분합니다. 이클립스에서 contents assist 를 이용하면 필요한 메소드들을 확인가능!!!!
2006 년에 회사 프로젝트로 xml 파싱하는게 있었는데 그 때 처음 써봤던 어노테이션...
reflection 과 함게 반복적인 코드들을 자동화 시킬 수 있는 콤보를 보여주신다.
일단 해볼 것은 toString 메소드 자동화를 해보려고 한다.
프로퍼티의 값을 설정하고 출력 테스트를 해보려면 각 클래스마다 toString 을 오버라이딩 해야하는데
귀찮은 건 딱 질색이므로... 일단 고고싱..
ㅁ PrintToString - Annotation
간단하게 설명 들어갑니다. @Retention 의 설명을 아래와 같다.
Indicates how long annotations with the annotated type are to be retained.
해석을 하자면 ... 안되겠다. 그냥 언제까지 어노테이션이 유지되는지를 설정한다.
속성으로는 RetentionPolicy.RUNTIME, CLASS, SOURCE 가 있다. 런타임에서 가지고 놀 것이므로
RUNTIME 을 선택!!
@Target <<< javadoc 은 아래와 같이 설명을 해준다.
Indicates the kinds of program element to which an annotation type is applicable.
어떤 종류의 어노테이션이냐 라는 것을 설정하는 것이다. 하나의 값을 설정해도 되고 여러개를 설정해도 된다.
속성의 종류는 ElementType.FIELD, TYPE, METHOD, PARAMETER, LOCAL_VARIABLE,
CONSTRUCTOR, PACKAGE 가 있다. 여기서는 프로퍼티에 설정할 것이므로 FILED 로 낙찰...
ㅁ 헬퍼 클래스들...
ToStringHelper 클래스는 toString 의 조작에 도움을 주는 클래스이며, BeansHelper 는 자바빈의
getter, setter 메소드를 가지고 오는데 사용합니다. (사실 어딨는지 몰라서 그냥 만든거임..)