블로그 이미지
올해목표 // 10월 어학연수 떠나자~ 자수씨

카테고리

전체글 (1457)
Brand New! (28)
주절주절 (213)
MOT (11)
해외쇼핑 (49)
쇼핑노트 (150)
취미생활 (94)
iPhone (4)
Eclipse (121)
Google (83)
Spring (31)
JAVA (176)
JavaScript (59)
WEB (49)
Database (20)
OS (26)
Tools (8)
Tips (26)
IT정보 (1)
Book (21)
Programming (37)
외부행사 (43)
주변인들 (17)
여행노트 (60)
학교생활 (30)
회사생활 (52)
사회생활 (5)
외국어공부 (12)
잡동사니 (30)
Total
Today
Yesterday
 
11-16 09:37
 

달력

« » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
 

최근에 올라온 글

최근에 달린 댓글


웹 서비스 클라이언트를 가장 빨리 테스트 할 수 있는 방법은 이클립스에서 Apache Axis 를 이용한 클라이언트를 제너레이션 하여 테스트하는 것 입니다.

하지만 HTTP Authentication 인증 처리는 자동화해주지 않기 때문에 제너레이션된 소스에 별도의 수정이 필요합니다.

생성된 클래스 중 [ServiceName]Location.java 파일이 있을 것 입니다.
저의 경우에는 WorkflowWebServicesserviceName 이기 때문에 WorkflowWebServicesLocator.java 파일을 수정하였습니다.


getWorkflowWebServicesPort(java.net.URL portAddress) 메소드에서 생성된 stub 에 username 과 password 프로퍼티를 설정하는 것입니다.
_stub._setProperty(_stub.USERNAME_PROPERTY, "vicki");
_stub._setProperty(_stub.PASSWORD_PROPERTY, "vickivicki");

위와 같이 username 과 password 를 설정하면.... HTTP 인증 절차도 통과가 됩니다.

유후~~

오늘 웹 서비스만 너무 많이 파고 들어간거 같네요... 힘이 듭니다. 털썩...

Posted by 자수씨
, |

기존에 Spring WebServices 로 웹 서비스 클라이언트를 이용하려면 아래와 bean 을 이용하였습니다.




하지만 HTTP Authentication 을 거쳐야 한다면 -ㅁ-;;;  무언가의 작업이 필요합니다.

그냥 원래의 wsdl 주소를 읽으려고 하면 다음과 같은 오류가 발생합니다.
Caused by: javax.xml.ws.WebServiceException: Failed to access the WSDL at: http://localhost:8080/WorkflowWebServices?wsdl. It failed with:
 Server returned HTTP response code: 401 for URL: http://localhost:8080/WorkflowWebServices?wsdl.




1. 브라우저를 통하여 wsdl 에 접근하여 해당 파일을 별도로 저장하여 클래스 패스에 위치시킵니다.
2. wsdlDocumentUrl 프로퍼티를 classpath 에서 읽을 수 있도록 설정합니다.
(해당 wsdl 자체에 접근하려면 인증이 필요한데 wsdl 을 읽을 단계에서는 인증처리가 안되기 때문입니다.)
3. username, password 프로퍼티를 설정합니다.
4. 웹 메소드 호출을 수행합니다.

username 과 password 가 옳지 않으면 다음과 같은 오류가 발생합니다.
Caused by: com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 401: Unauthorized

모든 조건을 만족하게 되면 정상적으로 웹 서비스의 웹 메소드를 호출할 수가 있습니다.


Posted by 자수씨
, |

회사에서 개발하는 솔루션이 spring framework 기반이라 웹서비스도 spring webservices 로 구축을 하였는데, JBoss 에 올리려고 하니 여러 오류가 생겨 재 작년부터 고민하고 여러가지 시도를 하였으나 실패를 하였습니다.

우연히 다른 것을 검색하다가 발견한 것에서 아이디어가 떠올라서 여러가지 실험을 해본 결과 JBoss 용 웹 서비스를 publish 하는 데 성공하였습니다.



기존의 Spring WebServices Class

별 다른 작업 없이 DI 를 이용하여 service 객체를 이용하여 웹 서비스를 제공하였습니다.



JBossWS 에서 Spring Bean 사용하는 WebService Class

JBossWS 에서@Resource 라는 어노테이션을 이용하여 ThreadLocal 한 WebServiceContext 객체를 설정할 수 있습니다.
메소드에 어노테이션 설정하여 WebServiceContext 객체가 웹 서비스 객체에 설정이 될 때 Spring Bean 을 WebApplicationContext 를 이용하여 가지고 오는 방법을 사용하였습니다.


이렇게 구성된 웹 서비스를 JBoss 에 publish 하는 방법은 단순합니다.

web.xml 에 servlet 과 servlet-mapping 에 웹 서비스 클래스를 등록하는 것이 전부입니다.


Spring WebService 로 publish 할 경우 별도의 포트로 binding 해야 하지만 JBossWS 는 JBoss 포트로 서비스가 가능합니다.

포트가 하나로 통합되면 얻는 이점이 많을 듯 합니다





Posted by 자수씨
, |

오늘 실서버에 배포를 하다보니... 실서버는 ethernet 이 4개나...

그전에 만들었던 LocalJaxWsServiceExporter 로는 맨처음 걸린 ethernet 의 아이피로만 배포가 되었습니다.
참고링크: 2008/11/24 - [JAVA/WebServices] - [Spring MVC] SimpleJaxWsServiceExporter 수정~


그래서 시스템의 모든 ethernet 컨트롤러를 조사하여 각각의 endpoint 로 배포하는 것을 맹글어 보았습니다.


InetAddress 로는 한계가 있기에 NetworkInterface 클래스를 이용하여 처리를 하였습니다.
참고자료: http://www.cowtowncoder.com/blog/archives/2007/05/entry_35.html

_M#]
나중에 java.net 패키지의 클래스들을 정리해봐야겠습니다.
유용한 것들이 많네요~




Posted by 자수씨
, |
org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter 를 이용하여 웹서비스를 등록할경우 호스트를 하드코딩해야 해서 개발과 운영서버에 각각의 아이피를 적어줘야 하는 불편함이 있었습니다. 그래서 초큼 수정해보았습니다.

LocalJaxWsServiceExporter.java


스프링 설정



과연 국내에서 Spring 으로 웹서비스하는 사람은 나밖에 없는건가 -_ㅜ... 검색을 해도 안걸리네...




Posted by 자수씨
, |

첨부파일을 JAX-WS 에서는 어떻게 넘길가가 궁금해서 한번 도전해보았습니다.
무모한 도전의 결과는 무한삽질의 반복이...
여튼 어느정도 성공을 한 듯 합니다. ㅋㅋㅋㅋ

ㅁ Server Side
kr/co/vicki/webservices/conf/uploadWebservicesContext.xml


WEB-INF/web.xml


kr.co.vicki.webservices.webservice.UploadWebService.java


  - @MTOM: binary attachment 전송을 위한 어노테이션
  - @SOAPBinding(style = SOAPBinding.Style.RPC)... 이건 무슨 말인지 모르겠습니다. 
    아래와 같은 설명이 어딘가에 있더라구요... 해석이 딸리므로... 읽으시는 분께 맡기겠습니다.
    그러나 해당 어노테이션이 정의되어 있지 않으면 클라이언트쪽에서 제너레이션 된 메소드의 파라미터가
    byte[] 이 아닌 DataHandler 가 되므로 일단 어노테이션을 위와 같이 설정합니다.
No, this is specified by the SOAPBinding annotation on the service class. Notice this in the original post above:

@SOAPBinding(style = SOAPBinding.Style.RPC)

This is telling wsgen that this is an rpc/literal service. A document/literal (doc/lit) service is specified thusly:

@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)

Actually, things are a little more complicated. This is actually specifying a doc/lit/wrapped service, meaning that the SOAP message body can contain multiple parameters. By contrast, in a doc/lit/bare service, the SOAP message body can contain only one parameter. For all the gory details, see the Annotations section of the JAX-WS User's Guide. 




ㅁ Client Side
kr/co/vicki/client/conf/webservicesContext.xml



kr/co/vicki/client/Client.java


서버의 public void fileUpload(String filename, DataHandler handler) 메소드는
클라이언트에서 public void fileUpload(String filename, byte[] arg1) 로 제너레이션 됩니다.
파일을 byte[] 로 변환하여 파일명과 함께 넘겨주게 되면 서버쪽에서 inputStream 으로 접근이 가능하게 됩니다.

첨부파일을 7KB와 4MB, 20MB 로 테스트 해본결과 20MB 는 힙 메모리 부족이라는 익센션을 날려주었습니다.
JAX-WS User Guide를 보면 용량 제한하는 어노테이션도 보이던데 테스트는 해보지 못했습니다.

이걸 해보며서 알게된 사항은 org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter 이놈은 한 컨텍스트에
한개의 웹서비스를 Export 해주는 것 같습니다. 크흑..

웹서비스는 재밌습니다?

[참고자료]
JAX-WS User Guide
  - https://jax-ws.dev.java.net/guide/Large_Attachments.html
  - https://jax-ws.dev.java.net/guide/Binary_Attachments.html
  - https://jax-ws.dev.java.net/guide/Creating_a_MTOM_Web_Service.html
java.net Forums
  - http://forums.java.net/jive/thread.jspa?threadID=25614

Posted by 자수씨
, |

Metro 1.4 is released

JAVA/WebServices / 2008. 10. 31. 10:35

[원문] http://blogs.sun.com/trustjdg/entry/metro_1_4_is_released

Metro 1.4 is released

Metro 1.4 is released today.

Metro 1.4 release includes WSIT 1.4, JAX-WS RI 2.1.5 and JAXB RI 2.1.7.

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.

Check out Metro site for more information:

https://metro.dev.java.net/

You may also find some stories how Metro is used in the real world:

1. http://blogs.sun.com/stories/entry/advantech

2. http://blogs.sun.com/stories/entry/fraunhofer_gesellschaft_ten_hospitals_initiates

3. http://blogs.sun.com/stories/entry/carrefour


어제 작업했는데 오늘 업데이트하면 어쩌란 말이냐.... -_ㅜ


Posted by 자수씨
, |

올해 초부터 웹서비스 쪽으로 공부를 했었는데, 항상 할 때마다 끝을 못 맺고 덮어두곤 하였습니다.
나름 이클립스에서 제공해주는 WebService 는 Apache Axis 를 사용해서 JAX-WS 를 쓰고싶은 저에게는
눈에 들어오지 않았습니다.

그렇게 시간이 흘러... 이클립스 RCP 로 개발한 어플리케이션과 WAS 와 연동을 해야 하는데 웹서비스를
쓰면 적당할 것 같아서 다시 자료들을 모아서 시작을 했는데 운이 좋게도 성공을 한 것 같습니다.

일단 나중에 서버 배포시의 설정만 약간 손보면 될 것 같습니다.


별도의 테스트 소스를 만들어서 올리고 싶지만 시간이 없는 관계로 이렇게 되었습니다.
나중에 시간이 되면 스크린캐스트로다가 샤샥...

Posted by 자수씨
, |

글 보관함

최근에 받은 트랙백