2010-07-23 2 views
7

저는 웹 서비스에 익숙하지 않으며 XML, SOAP 및 WSDL에 대한 정보를 읽었습니다. 이것은 매우 흥미 롭다! 저는 웹 서비스와 클라이언트가있는 기존 프로젝트에서 작업하고 있습니다. 그러나 클라이언트는 'higher ups'클라이언트 응용 프로그램에 만족하지 않습니다. 너무 복잡해서 쉽게 확장 할 수있는보다 사용자 친화적이고 간단한 앱을 원합니다.WSDL 파일에서 Java 클라이언트 스텁을 자동 생성하는 방법은 무엇입니까?

프로젝트는 Apache Axis2를 사용합니다. 나는 WSDL 파일을 찾았고 그것을 기반으로 클라이언트를 만들고 싶다. 그러나 나는 위의 이유로 (그들의 견해) Axis2를 사용하고 싶지 않다. 나는 기존의 WSDL 파일을 기반으로 클라이언트 스텁을 자동으로 생성하는 데 사용할 수있는 다른 방법을 아는 사람이 있습니까? Wsimport에 대해 들어 봤는데 wsdl 파일이 Axis2를 사용하여 생성 된 경우에도 여전히 작동해야합니까?

도움이나 팁을 주시면 감사하겠습니다.

답변

2

Step1: Generate Skeleton Code를 참조하십시오

은 골격과 필요한 클래스를 생성하려면, 당신은 Axis2와에서 제공하는 WSDL2Java의 도구를 사용할 수 있습니다. 이 도구는 배포판의 bin 디렉토리에 있으며 제공된 스크립트 (.bat 또는 .sh)를 사용하여 실행할 수 있습니다.

$ wsdl2java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans 
    -o ../samples -p org.apache.axis2.userguide 
+1

안녕하세요. 감사합니다. 부분적으로 (-uri 플래그 만 사용)이 방법을 시도해 보았습니다. 기존 클라이언트 코드를 자세히 조사한 결과, 원래 개발자는 WSDL2Java를 사용하여 클라이언트 스텁을 생성 한 것으로 보입니다. 나는 아마도 기존 axis2 자동 생성 wsdl 파일과 함께 작동하는 또 다른 방법을 사용할 수 있을지 궁금합니다. 그렇지 않으면 원래 개발자가 사용한 것과 같은 방법을 사용하게 될 것입니다. 다시 한번 똑같은 '너무 복잡한'클라이언트를 만듭니다. (아니면 그냥 WSDL2Java를 사용해야하며 코드를 더 간단하게 작성해야합니까?) – ghostlines

2

하나에 기술 된 방법을 사용합니다. 고객에게 구현 기술이 무엇보다 우선되는지 물어 보는 것이 가장 좋습니다. 수있는 클라이언트는 그들이 그냥 "작품"및 "쉬운 무언가를 원하는 뜻 상관하지 않는 경우 즉시

:-) 자신이 좋아하는 망치로 자신의 allegience를 선언하는 Java 또는 C# 클라이언트를 지원

클라이언트/싼 유지 ". 그렇다면 다음 해결책 중 하나를 권하고 싶습니다. answer

저는 Axis2의 팬입니다.하지만 CXF가 복잡한 WSDL에서 더 읽기 쉬운 코드를 생성하는 것은 제 경험이었습니다. WSDL은 복잡하고 여러 수준의 XML 스키마 상속으로 인해 과도하게 설계되는 경향이 있습니다. 클라이언트는 항상 코드 생성 프레임 워크를 "읽을 수없는"클라이언트 코드로 비난합니다 비싼 XML 디자인 도구의 도움없이 해석 할 수없는 인터페이스 사양에 대한 생각없이 :-)

서버 측 코드를 제어하는 ​​경우 동일한 SOAP 메시지의 유효성을 검사하도록 WSDL을 단순화하십시오. 클라이언트 측 코드가 훨씬 단순 해져서 웹 서비스가 제공하는 것을 더 잘 이해할 수 있습니다.

대체 (사용자가 WSDL을 제어하지 않는 경우) SOAPUI과 같은 도구를 사용하여 교환중인 실제 SOAP/XML을보고 해당 XML 메시지를 직접 생성하십시오.

2

시도 wsimport. 나는 그것을 이전에 사용했다. 그 당시에는 Axis2에 비해 코드가 더 복잡하고 비대화 된 스텁을 생성했기 때문에 Axis2에 대한 결정을 내 렸습니다.

+0

감사합니다. wsimport를 시도하고 일부 .class 파일을 생성했습니다. .class 파일은 바이트 코드 대신 읽을 수있는 코드입니다. .java 확장을 변경하고이를 사용하여 새 클라이언트 응용 프로그램을 빌드 해 보겠습니다. – ghostlines

+2

@ghostlines : 오! "-keep"옵션을 지정하면 올바르게 기억되면 .java 파일을 얻습니다. – waxwing

+0

wsimport를 사용하여 소스에있는 로컬 wsdl 파일에서 내 clientstub를 만들었습니다. 나는 webservice 자체에서이 방법을 얻을 수 없었다. 많은 방법을 본다. 나를 위해 작동하지 않는다. -> wsimport http : //

: /service? WSDL. 그리고이 튜토리얼의 클라이언트 부분을 읽었습니다. https://jax-ws.dev.java.net/jax-ws-ea3/docs/UsersGuide.html#mozTocId69398 하지만 웹 서비스의 주소를 사용하여 스텁을 사용하여 요청을 호출 할 수 있습니다. 별도의 비누 메시지를 작성하고 엔드 포인트와 포트를 지정해야합니까? 도움을 얻었습니다 – ghostlines

4

우리는 xfire를 사용했지만 wsdl 중심 방식을 사용하지 않았습니다. wsdl은 공개 된 원격 인터페이스에서 즉시 작성되었습니다. 클라이언트에는 자동으로 생성 된 wsdl에 매핑 된 동일한 인터페이스가있었습니다.

AFAICS은 CXF로 진화 Xfire를하고 CXF home page이 나에게 말한다 :

CXF 자바부터 WSDL 및 코드 첫번째 발전과 모두 계약 첫째 개발을 지원합니다. REST의 경우 CXF는 JAX-RS (TCK 준수) 프런트 엔드도 지원합니다.

wsdl을 기반으로 선택하면 기존 WSDL 파일에서 클라이언트 쪽 스텁을 생성하기 위해 wsdl2java 도구가 필요합니다. 두 피어 모두 java를 실행하면 java 중심 접근 방식이 적용 가능하고 상당히 투명 해집니다 (서비스 인터페이스/POJO가 모든 스텁/프록시 생성 단계를 거치지 않고 런타임에 생성 된 전송을 통해 클라이언트/서버간에 공유 될 수 있음).

+0

아니요, 관련 인터페이스 또는 POJO에 대한 추가 주석이 필요하지 않았습니다. offtopic의 비트,하지만 당신은 RESTful 웹 서비스 모델을 살펴볼 수 있을까요? 이것은 JSON을 사용하는 XML과 같은 데이터 유형/구조체 안전이 아니지만 Jackson JSON 매핑 라이브러리를 사용하여 400 줄의 코드로 맞춤 RPC 프로토콜을 만들 수있었습니다. –

+0

피드백을 보내 주셔서 감사합니다. 이번 주에 작업하게 될 것이고, 제가 취한 경로를 알려 드리겠습니다. – ghostlines

관련 문제