2009-02-04 2 views
2

자바 메소드를 웹 서비스로 노출해야하는 상황에 있는데,이 기술을 선택해야합니다. 그렇게하기 위해 나는 근본적으로 약간 당혹 스럽다.주어진 메소드를 웹 서비스로 노출하는 가장 간단한 방법 - Java의 웹 컨테이너에서 결과를 실행 가능해야 함 5

요구 사항은 다음과 같습니다

  • 가에서 실행 가능한해야하는 IBM 자바 5
  • 가에서 분리해야하는 임베디드 부두 내 웹 응용 프로그램 (현재 버전 6)로 배포이어야합니다 IDE (이전에 MyEclipse 5에서 XFire를 사용했으며, 독립 실행 형 버전을 원했습니다.)
  • 오픈 소스가 지원되어야하며, 합리적으로 빠르고, 오픈 소스 여야합니다.
  • 사용하기가 간단하다면 정말 좋을 것입니다.

CFX (XFire), Axis 1과 2, Netbeans 6 (Glassfish 필요), JAX-WS (Java 6의 기능은 분명히 좋지만 아마 그렇지는 않습니다. JDeveloper는 Eclipse와 Eclipse를 가지고 있으며, 결정하기에 충분한 정보를 얻는 데 어려움을 겪고 있습니다.

포인터, 경험, 권장 사항 및 경고에 감사드립니다.


선택한 방법은 제대로 작동하는 Metro 1.4를 사용하는 것입니다.


나는이 아마에서 촬영하는 가장 중요한 단일 기술적 인 결정이다 (http://archive.midrange.com/java400-l/200904/msg00071.html

정보는 어떤 서블릿 2.4 호환 컨테이너에 대한 유효에 http://archive.midrange.com/java400-l/200902/msg00074.html에서 더 상세하게 내 경험에 대해 다른 사람을 말한 전체 메트로 프로젝트 IMHO :))

+0

JAX-WS는 사양이며 JAX-WS RI가 구현 중 하나입니다. Java 6 SE에는 JAX-WS가 포함되어 있습니다 (Sun JRE는 JAX-WS RI를 사용합니다). 그러나 Java 5에서 JAX-WS 사용을 중단하는 것은 없습니다 (이전 버전에서는 JAX-WS에 주석이 필요하기 때문에 작동하지 않습니다). –

답변

4

(J2EE 1.5+ 또는 J2SE 6+와 함께 제공되는 것과 동일한) 스택을 Glassfish와 별도로 다운로드하여 사용할 수 있습니다. @Webservice 주석을 사용하므로 서비스 공개가 상당히 쉽습니다.

Metro 사이트에는 Eclipse와 함께 사용하는 것에 대해서도 page이 있습니다. 또한 jetty.xml의와 분명히 부두 내장 ... 부두와 함께 작동하도록 것에 대해 캔 still be usedblog post을 발견

+0

JAX-WS와 결합 된'Endpoint' 클래스는 매우 유용합니다. –

2
내가 JSR-181 웹 서비스 주석을 사용하여 아파치 CXF 투표 것

:

http://cwiki.apache.org/CXF20DOC/a-simple-jax-ws-service.html

간단한 예 :

@WebService 
public class Hello { 
    public String sayHi(String name) { 
     return "Hello " + name; 
    } 
} 

당신은 합리적으로 가볍고 매우 휴대용 오픈 소스 솔루션과 함께 주석 기반 개발의 사용의 용이성을 얻는다. 컨테이너에 배포하지 않고 CXF 기반 서비스를 노출하려면 내장 된 Jetty 자체를 사용하는 데 대한 탁월한 지원이 필요합니다.

+0

이것은 Metro 제안에 가까운 경쟁자 였지만 결정적인 요소는 Sun이 .NET과의 상호 운용성에 부여한 관심이었습니다. 선택의 여지가 있기 때문에 JSR-181에 사용 된 주석 접근 방식을 사용하여 필요에 따라 Metro를 CXF로 전환 할 수 있기를 바랍니다. –

1

저는 스프링 웹 서비스를 사용하고 있습니다. 그들은 나를 Axis, XFire 등으로부터 격리시킵니다.

0

나는 가벼운 자신 만의 운명 접근 방식을 선호합니다. 커뮤니케이션의 양면을 제어하는 ​​경우 자신의 단순하고 최적화 된 전송을 선택하십시오. 양측을 모두 제어하지 않으면 주어진 제안 (특히 XML 기반)과 같은 것이 붙어있을 가능성이 큽니다.

XML을 사용하지 않고 SOAP, Axis 등과 같은 많은 래퍼 레이어를 사용하지 않는 매우 가벼운 웹 서비스를 선호합니다. 정말로 필요한 것은 HTTP와 공유 데이터 표현입니다.

HTTP의 경우 데이터 (부작용 없음)를 읽으려면 GET을하고, 필요한 경우 PUT, DELETE 등과 같이 작업 (부작용)을 제출하기위한 POST를 수행해야합니다.

데이터 표현의 경우, 웹 서비스에 대한 다른 모든 접근 방식은 많은 요구 사항을 가정하고 많은 복잡성을 추가한다는 것을 명심하십시오. 대부분의 사용자는 실적을 완전히 무시합니다 (예 : XML은 실적이 좋지 않음).

제 3 자와의 상호 운용성을 위해 XML이 필요하지 않은 경우 많은 어려움을 줄이고 성능을 다시 확보 할 수 있습니다. HTTP는 텍스트 기반이므로 데이터를 간단한 문자열로 변환하십시오. Java로되어 있기 때문에 데이터가 복잡한 경우 등록 정보 파일 형식을 사용하십시오. 세부 정보가 포함 된 고객 주문의 전체 개체 그래프와 같이 데이터가 훨씬 복잡한 경우 JSON 사용을 고려하십시오.

특정 요구 사항이 나를 SOAP 또는 다른 것으로 강제하지 않는 한 JSON을 사용하여 향후 모든 노력을 기울일 수 있습니다. JSON을 사용하면 AJAX를 통해 웹 서비스를 쉽게 사용할 수 있으며 플랫폼 및 언어 간의 상호 운용성을 쉽게 수용 할 수 있습니다. 또한 JSON은 단일 데이터 값 또는 속성 - 파일 형식 데이터 (간단한 이름/값 쌍 세트) 전달과 같은 간단한 사례를 잘 처리합니다.

성능을 정말로 필요로하지만 상호 운용성과 단순성을 원하는 경우 데이터를 쉽게 전달할 수있는 또 다른 옵션은 Google의 프로토콜 버퍼입니다. 그러나, 나는 귀하의 즉각적인 필요가 그 선택에 맞지 않을지 의심 스럽다.

2

"Java 메소드를 웹 서비스로 노출"과 같은 요구 사항은 대부분 웹 서비스가 아닌 일종의 원격 액세스가 필요하다는 것을 의미합니다. 부풀린 SOAP, 결국 WSDL은 솔루션을 더 복잡하게 만듭니다. 그것은 있어야합니다. 목표가 이상적으로 웹 서비스를 만드는 것이 목표라면 WSDL (Contract First)에서 시작해야합니다. Even Spring recommends that.

클라이언트와 서버를 제어 할 수 있고 둘 다 Java 인 경우 Remoting을 권장합니다. 저는 Spring Remoting을 좋아하는데, 특별히 binary protocols from Cauho입니다. 상호 운용성은 매우 쉽습니다. Pojos와 함께 작업 할 것이고 데이터가 바이너리 형식으로 전송되기 때문에 XML을 사용하는 웹 서비스보다 성능이 향상 될 것입니다.

클라이언트 쪽에서 제어 할 수없는 경우 XML에서 상호 운용성을 제공하므로 간단한 XML 또는 JSON을 통한 HTTP 서비스를 선택하게됩니다. 나는 과거에 성공한 XStream을 사용하여 Java Object의 간단한 XML 표현을 작성했습니다.

+0

응답 해 주셔서 감사합니다. 불행히도 나는 양쪽면에서 통제권이 없으며, 다른 쪽이 무엇을 사용하고 있는지 모른다. 귀하가 필요로하는 WebServices의 기본 기능은 분리 된 개발을 허용하는 계약입니다. –

0

응답 해 주신 모든 분들께 감사드립니다.

다른 접근 방식은 좋은 생각이 아닙니다. "WSDL 계약"을 위해 웹 서비스가 선택되었으므로 다양한 공급 업체의 팀 간 분리 된 개발이 가능하며 다양한 오버 헤드가 덜 중요합니다.

모든 제안 사항을 살펴본 결과, @WebService 방식이 마음에 들었고, 첫 번째 시도에서 Metro가 우리 시나리오에서 작동하게 될 것이라고 판단했습니다.CFX 패키지는 매우 많은 양의 의존성을 가지고 있으며, Metro는 서블릿 2.4와 호환되며 Tomcat에서 실행되어야합니다. 유감스럽게도 Metro에서는 Java 6의 일부 버전이 부트 클래스 경로에 있어야하는 클래스가 필요하지만이 시나리오에서는 우회 할 수 있어야합니다.


2009-02-19 : 그것은 지하철 1.4 런타임 라이브러리는 이전에 "쉽다"사전 처리를 요구하고 생성 된 아티팩트를 배포 즉석에서 클래스를 생성 할 수있는 것으로 나타났다. 임베디드 Jetty 6.1 웹 컨테이너와 Eclipse Java EE Perspective의 Tomcat 6 및 Jetty 6 서버에서 쉽게 실행되므로 쉽게 개발할 수 있습니다.

WebService 및 WebMethod 주석이있는 원래 클래스 만 배포하는 방법은 소스가 향후 사양 구현과 함께 변경되지 않도록하는 방법입니다. 다행스럽게도 재 컴파일없이. 추천 된 대답으로 표시된 제안.

+0

부트 클래스 경로에 있어야하는 클래스는 JAX-WS API입니다. 그리고 그것들은 업데이트 3 또는 4까지만 필요합니다 (어떤 것을 기억할 수 없는지). 나중에 릴리스는 그 트릭없이 잘 작동합니다. 행운을 빕니다. –

관련 문제