24.3. 코드에 주석 달기
24.3.1. Cryostat-WS 주석 개요
Cryostat-WS 주석은 SEI를 완전히 지정된 서비스 정의에 매핑하는 데 사용되는 메타데이터를 지정합니다. 주석에 제공된 정보는 다음과 같습니다.
- 서비스의 대상 네임스페이스입니다.
- 요청 메시지를 보유하는 데 사용되는 클래스의 이름입니다.
- 응답 메시지를 보관하는 데 사용되는 클래스의 이름입니다.
- 작업이 한 가지 방법인 경우
- 서비스에서 사용하는 바인딩 스타일
- 사용자 정의 예외에 사용되는 클래스의 이름입니다.
- 서비스에서 사용하는 유형이 정의된 네임스페이스
대부분의 주석에는 합리적인 기본값이 있으며 값을 제공할 필요가 없습니다. 그러나 주석에 더 많은 정보를 제공하면 서비스 정의가 더 잘 지정됩니다. 잘 지정된 서비스 정의는 분산 애플리케이션의 모든 부분이 함께 작동할 가능성을 높입니다.
24.3.2. 필수 주석
24.3.2.1. 개요
Java 코드에서 서비스를 생성하려면 코드에 하나의 주석만 추가해야 합니다. SEI 및 구현 클래스 모두에 @WebService
주석을 추가해야 합니다.
24.3.2.2. @WebService 주석
@WebService
주석은 javax.jws.WebService 인터페이스에 의해 정의되며 인터페이스로 배치되며 서비스로 사용하기 위한 클래스 또는 인터페이스에 배치됩니다. @WebService
에는 에 설명된 속성이 있습니다. 표 24.1. “@WebService
속성”
속성 | 설명 |
---|---|
서비스 인터페이스의 이름을 지정합니다. 이 속성은 WSDL 계약에서 서비스의 인터페이스를 정의하는 | |
서비스가 정의된 대상 네임스페이스를 지정합니다. 이 속성을 지정하지 않으면 대상 네임스페이스가 패키지 이름에서 파생됩니다. | |
게시된 서비스의 이름을 지정합니다. 이 속성은 게시된 서비스를 정의하는 | |
서비스의 WSDL 계약이 저장되는 URL을 지정합니다. 상대 URL을 사용하여 지정해야 합니다. 기본값은 서비스가 배포된 URL입니다. | |
구현 클래스에서 구현하는 SEI의 전체 이름을 지정합니다. 이 속성은 서비스 구현 클래스에서 속성을 사용할 때만 지정됩니다. | |
서비스가 게시되는 끝점의 이름을 지정합니다. 이 속성은 게시된 서비스에 대한 엔드포인트 세부 정보를 지정하는 | |
[a]
SEI에서 WSDL을 생성하면 구현 클래스 이름 대신 인터페이스 이름이 사용됩니다.
|
@WebService
주석의 속성에 대해 값을 제공할 필요는 없습니다. 그러나 가능한 한 많은 정보를 제공하는 것이 좋습니다.
24.3.2.3. SEI 주석 처리
SEI에서 @WebService
주석을 추가해야 합니다. SEI는 서비스를 정의하는 계약이므로 @WebService
주석의 속성에 대해 가능한 한 자세히 지정해야 합니다.
예 24.3. “@WebService
주석과 인터페이스” @WebService
주석을 사용하여 예 24.1. “간단한 SEI” 에 정의된 인터페이스를 표시합니다.
예 24.3. @WebService
주석과 인터페이스
package com.fusesource.demo; import javax.jws.*; @WebService(name="quoteUpdater", targetNamespace="http://demos.redhat.com", serviceName="updateQuoteService", wsdlLocation="http://demos.redhat.com/quoteExampleService?wsdl", portName="updateQuotePort") public interface quoteReporter { public Quote getQuote(String ticker); }
예 24.3. “@WebService
주석과 인터페이스” 의 @WebService
주석은 다음을 수행합니다.
서비스 인터페이스를 정의하는 wsdl:portType
요소의 name
속성 값이 quoteUpdater
임을 지정합니다.
서비스의 대상 네임스페이스가 http://demos.redhat.com 임을 지정합니다.
게시된 서비스를 정의하는 wsdl:service
요소의 name
값이 updateQuoteService
임을 지정합니다.
서비스가 http://demos.redhat.com/quoteExampleService?wsdl 에서 WSDL 계약을 게시하도록 지정합니다.
서비스를 노출하는 엔드포인트를 정의하는 wsdl:port
요소의 name
속성 값이 updateQuotePort
임을 지정합니다.
24.3.2.4. 서비스 구현 주석 처리
@WebService
주석으로 SEI에 주석을 달 수 있는 것 외에도 @WebService
주석을 사용하여 서비스 구현 클래스에 주석을 달아야 합니다. 서비스 구현 클래스에 주석을 추가할 때 endpointInterface
속성만 지정해야 합니다. 예 24.4. “주석이 달린 서비스 구현 클래스” 에 표시된 대로 속성은 SEI의 전체 이름으로 설정해야 합니다.
예 24.4. 주석이 달린 서비스 구현 클래스
package org.eric.demo; import javax.jws.*; @WebService(endpointInterface="com.fusesource.demo.quoteReporter") public class stockQuoteReporter implements quoteReporter { public Quote getQuote(String ticker) { ... } }
24.3.3. 선택적 주석
초록
@WebService
주석은 Java 인터페이스 또는 Java 클래스를 활성화하는 서비스에 충분하지만 서비스가 서비스 공급자로 노출되는 방법을 완전히 설명하지는 않습니다. Cryostat-WS 프로그래밍 모델에서는 사용하는 바인딩과 같은 서비스에 대한 세부 정보를 Java 코드에 추가하기 위해 여러 선택적 주석을 사용합니다. 이러한 주석을 서비스의 SEI에 추가합니다.
SEI에서 제공하는 세부 정보가 많을수록 개발자가 정의한 기능을 사용할 수 있는 애플리케이션을 더 쉽게 구현할 수 있습니다. 또한 툴에 의해 생성된 WSDL 문서를 보다 구체적으로 만듭니다.
24.3.3.1. 개요
주석을 사용하여 바인딩 속성 정의
서비스에 Cryostat 바인딩을 사용하는 경우 Cryostat-WS 주석을 사용하여 여러 바인딩 속성을 지정할 수 있습니다. 이러한 속성은 서비스의 WSDL 계약에 지정할 수 있는 속성에 직접 해당합니다. 매개 변수 스타일과 같은 일부 설정은 메서드를 구현하는 방법을 제한할 수 있습니다. 이러한 설정은 메서드 매개변수에 주석을 달 때 사용할 수 있는 주석에도 영향을 미칠 수 있습니다.
24.3.3.2. @SOAPBinding 주석
@SOAPBinding
주석은 javax.jws.soap.SOAPBinding 인터페이스에서 정의합니다. 배포 시 서비스에서 사용하는 Cryostat 바인딩에 대한 세부 정보를 제공합니다. @SOAPBinding
주석을 지정하지 않으면 래핑된 doc/literal#159 바인딩을 사용하여 서비스가 게시됩니다.
@SOAPBinding
주석을 SEI 및 SEI의 메서드에 배치할 수 있습니다. 메서드에서 사용하는 경우 메서드의 @SOAPBinding
주석 설정이 우선합니다.
표 24.2. “@SOAPBinding
속성” @SOAPBinding
주석의 속성을 표시합니다.
속성 | 값 | 설명 |
---|---|---|
style.DOCUMENT(기본값) Style.RPC |
Cryostat 메시지의 스타일을 지정합니다. RPC 스타일이 지정되면 Cryostat 본문 내의 각 메시지 부분은 매개변수 또는 반환 값이며 | |
use.LITERAL (기본값) 사용.ENCODED[a] | Cryostat 메시지의 데이터를 스트리밍하는 방법을 지정합니다. | |
| ParameterStyle.BARE ParameterStyle.WRAPPED (기본값) | WSDL 계약의 메시지 부분에 해당하는 메서드 매개 변수를 Cryostat 메시지 본문에 배치하는 방법을 지정합니다. BARE가 지정되면 각 매개변수가 메시지 루트의 자식 요소로 메시지 본문에 배치됩니다. WRAPPED가 지정되면 모든 입력 매개변수가 요청 메시지의 단일 요소로 래핑되고 모든 출력 매개변수는 응답 메시지의 단일 요소로 래핑됩니다. |
[a]
Use.ENCODED는 현재 지원되지 않습니다.
[b]
스타일을 RPC로 설정하면 WRAPPED 매개변수 스타일을 사용해야 합니다.
|
24.3.3.3. 베어 스타일 매개변수 문서
문서 베어 스타일은 Java 코드와 서비스의 결과 XML 표현 간의 가장 직접적인 매핑입니다. 이 스타일을 사용할 때 작업의 매개 변수 목록에 정의된 입력 및 출력 매개변수에서 직접 스키마 유형이 생성됩니다.
@SOAPBinding
주석과 함께 style.DOCUMENT로 설정된 해당 style
속성 및 ParameterStyle.BARE로 설정된 parameterStyle
속성을 사용하여 베어 문서\literal 스타일을 사용하도록 지정합니다.
베어 매개 변수를 사용할 때 작업이 문서 스타일 사용에 대한 제한을 위반하지 않도록 하려면 다음 조건을 준수해야 합니다.
- 작업에는 입력 또는 input/output 매개변수가 둘 이상 없어야 합니다.
-
작업에
void
이외의 반환 유형이 있는 경우 출력 또는 입력/출력 매개변수가 없어야 합니다. -
작업에 반환 유형이 있는 경우 출력 또는 input/output 매개변수가 두 개 이상 있어야 합니다.
@WebParam
주석 또는 @WebResult
주석을 사용하여 Cryostat 헤더에 배치된 매개변수는 허용된 매개변수 수에 대해 계산되지 않습니다.
24.3.3.4. 문서 래핑된 매개변수
문서 래핑 스타일을 사용하면 Java 코드와 서비스의 결과 XML 표현 간의 매핑과 같은 더 많은 RPC를 사용할 수 있습니다. 이 스타일을 사용할 때 메서드 매개변수 목록의 매개 변수는 바인딩에 따라 단일 요소로 래핑됩니다. 이 문제의 단점은 Java 구현과 메시지가 유선에 배치되는 방법 간의 추가 단방향 계층을 도입한다는 것입니다.
래핑된 문서\literal 스타일을 사용하려면 @SOAPBinding
주석을 style
.DOCUMENT로 설정하고 해당 parameterStyle
속성을 ParameterStyle.WRAPPED로 설정합니다.
“@RequestWrapper 주석” 주석 및 “@ResponseWrapper 주석” 주석을 사용하여 래퍼를 생성하는 방법을 일부 제어할 수 있습니다.
24.3.3.5. 예
예 24.5. “Cryostat 바인딩 주석을 사용하여 문서 Bare#159 바인딩 지정” 문서 베어 Cryostat 메시지를 사용하는 SEI를 표시합니다.
예 24.5. Cryostat 바인딩 주석을 사용하여 문서 Bare#159 바인딩 지정
package org.eric.demo; import javax.jws.*; import javax.jws.soap.*; import javax.jws.soap.SOAPBinding.*; @WebService(name="quoteReporter") @SOAPBinding(parameterStyle=ParameterStyle.BARE) public interface quoteReporter { ... }
24.3.3.6. 개요
주석을 사용하여 작업 속성 정의
런타임에서 Java 메서드 정의를 XML 작업 정의에 매핑하면 다음과 같은 세부 정보를 제공합니다.
- 교환된 메시지는 XML에서와 같습니다.
- 메시지를 하나의 메시지로 최적화할 수 있는 경우
- 메시지가 정의된 네임스페이스
24.3.3.7. @WebMethod 주석
@WebMethod
주석은 javax.jws.WebMethod 인터페이스에서 정의합니다. 이는 SEI의 방법에 배치됩니다. @WebMethod
주석은 메서드가 연결된 작업을 설명하는 wsdl:operation
요소에 일반적으로 표시되는 정보를 제공합니다.
표 24.3. “@WebMethod
속성” @WebMethod
주석의 속성을 설명합니다.
속성 | 설명 |
---|---|
연결된 | |
메서드에 대해 생성된 | |
메서드를 서비스 인터페이스에서 제외해야 하는지 여부를 지정합니다. 기본값은 false입니다. |
24.3.3.8. @RequestWrapper 주석
@RequestWrapper
주석은 javax.xml.ws.RequestWrapper 인터페이스에서 정의합니다. 이는 SEI의 방법에 배치됩니다. @RequestWrapper
주석은 메시지 교환을 시작하는 요청 메시지의 메서드 매개 변수에 대해 래퍼 빈을 구현하는 Java 클래스를 지정합니다. 또한 요청 메시지를 마샬링하고 unmarshalling할 때 런타임에서 사용하는 요소 이름과 네임스페이스를 지정합니다.
표 24.4. “@RequestWrapper
속성” @RequestWrapper
주석의 속성을 설명합니다.
속성 | 설명 |
---|---|
요청 메시지의 XML 표현에서 래퍼 요소의 로컬 이름을 지정합니다. 기본값은 메서드 이름 또는 “@WebMethod 주석” 주석의 | |
XML 래퍼 요소가 정의된 네임스페이스를 지정합니다. 기본값은 SEI의 대상 네임스페이스입니다. | |
래퍼 요소를 구현하는 Java 클래스의 전체 이름을 지정합니다. |
className
속성만 필요합니다.
메서드에도 @SOAPBinding
주석이 추가되고 해당 parameterStyle
속성이 ParameterStyle.BARE
로 설정된 경우 이 주석은 무시됩니다.
24.3.3.9. @ResponseWrapper 주석
@ResponseWrapper
주석은 javax.xml.ws.ResponseWrapper 인터페이스로 정의됩니다. 이는 SEI의 방법에 배치됩니다. @ResponseWrapper
는 메시지 교환의 응답 메시지에 메서드 매개 변수에 대한 래퍼 빈을 구현하는 Java 클래스를 지정합니다. 또한 응답 메시지를 마샬링하고 unmarshalling할 때 런타임에서 사용하는 요소 이름과 네임스페이스를 지정합니다.
표 24.5. “@ResponseWrapper
Properties” @ResponseWrapper
주석의 속성을 설명합니다.
속성 | 설명 |
---|---|
응답 메시지의 XML 표현에서 래퍼 요소의 로컬 이름을 지정합니다. 기본값은 Response가 추가된 메서드 이름 또는 응답이 추가된 “@WebMethod 주석” 주석의 | |
XML 래퍼 요소가 정의된 네임스페이스를 지정합니다. 기본값은 SEI의 대상 네임스페이스입니다. | |
래퍼 요소를 구현하는 Java 클래스의 전체 이름을 지정합니다. |
className
속성만 필요합니다.
메서드에도 @SOAPBinding
주석이 추가되고 해당 parameterStyle
속성이 ParameterStyle.BARE
로 설정된 경우 이 주석은 무시됩니다.
24.3.3.10. @WebFault 주석
@WebFault
주석은 javax.xml.ws.WebFault 인터페이스에서 정의합니다. SEI에서 throw하는 예외에 적용됩니다. @WebFault
주석은 Java 예외를 wsdl:fault
요소에 매핑하는 데 사용됩니다. 이 정보는 서비스와 소비자 둘 다에서 처리할 수 있는 표현으로 예외를 마샬링하는 데 사용됩니다.
표 24.6. “@WebFault
속성” @WebFault
주석의 속성을 설명합니다.
속성 | 설명 |
---|---|
fault 요소의 로컬 이름을 지정합니다. | |
fault 요소가 정의된 네임스페이스를 지정합니다. 기본값은 SEI의 대상 네임스페이스입니다. | |
예외를 구현하는 Java 클래스의 전체 이름을 지정합니다. |
name
속성이 필요합니다.
24.3.3.11. @Oneway 주석
@Oneway
주석은 javax.jws.Oneway 인터페이스에서 정의합니다. 서비스의 응답이 필요하지 않은 SEI의 메서드에 배치됩니다. @Oneway
주석은 응답을 기다리지 않고 응답을 처리할 리소스를 예약하지 않고 메서드 실행을 최적화할 수 있음을 런타임에 알립니다.
이 주석은 다음 기준을 충족하는 메서드에서만 사용할 수 있습니다.
-
공백
을 반환합니다. - Holder 인터페이스를 구현하는 매개변수가 없습니다.
- 소비자로 다시 전달할 수 있는 예외는 발생하지 않습니다.
24.3.3.12. 예
예 24.6. “Annotated Methods가 있는 SEI” 는 주석이 달린 SEI를 표시합니다.
예 24.6. Annotated Methods가 있는 SEI
package com.fusesource.demo; import javax.jws.*; import javax.xml.ws.*; @WebService(name="quoteReporter") public interface quoteReporter { @WebMethod(operationName="getStockQuote") @RequestWrapper(targetNamespace="http://demo.redhat.com/types", className="java.lang.String") @ResponseWrapper(targetNamespace="http://demo.redhat.com/types", className="org.eric.demo.Quote") public Quote getQuote(String ticker); }
24.3.3.13. 개요
주석을 사용하여 매개변수 속성 정의
SEI의 메서드 매개 변수는 wsdl:message
요소 및 해당 wsdl:part
요소에 해당합니다. Cryostat-WS는 메서드 매개변수에 대해 생성되는 wsdl:part
요소를 설명할 수 있는 주석을 제공합니다.
24.3.3.14. @WebParam 주석
@WebParam
주석은 javax.jws.WebParam 인터페이스에서 정의합니다. SEI에 정의된 메서드의 매개 변수에 배치됩니다. @WebParam
주석을 사용하면 매개변수가 Cryostat 헤더에 배치되고 생성된 wsdl:part
의 기타 속성을 매개 변수의 방향을 지정할 수 있습니다.
표 24.7. “@WebParam
Properties” @WebParam
주석의 속성을 설명합니다.
속성 | 값 | 설명 |
---|---|---|
생성된 WSDL 문서에 표시되는 매개 변수의 이름을 지정합니다. RPC 바인딩의 경우 매개 변수를 나타내는 | ||
매개변수의 네임스페이스를 지정합니다. 매개 변수가 XML 요소에 매핑되는 문서 바인딩에서만 사용됩니다. 기본값은 서비스의 네임스페이스를 사용하는 것입니다. | ||
mode.IN(기본값)[a] Mode.OUT mode.INOUT | 매개변수의 방향을 지정합니다. | |
false(기본값) true | 매개 변수가 Cryostat 헤더의 일부로 전달되는지 여부를 지정합니다. | |
매개 변수의 | ||
[a]
Holder 인터페이스를 구현하는 모든 매개변수는 기본적으로 Mode.INOUT에 매핑됩니다.
|
24.3.3.15. @WebResult 주석
@WebResult
주석은 javax.jws.WebResult 인터페이스에서 정의합니다. SEI에 정의된 메서드에 배치됩니다. @WebResult
주석을 사용하면 메서드의 반환 값에 대해 생성된 wsdl:part
의 속성을 지정할 수 있습니다.
표 24.8. “@WebResult
속성” @WebResult
주석의 속성을 설명합니다.
속성 | 설명 |
---|---|
생성된 WSDL 문서에 표시되는 반환 값의 이름을 지정합니다. RPC 바인딩의 경우 반환 값을 나타내는 | |
반환 값의 네임스페이스를 지정합니다. 반환 값이 XML 요소에 매핑되는 문서 바인딩에서만 사용됩니다. 기본값은 서비스의 네임스페이스를 사용하는 것입니다. | |
반환 값이 Cryostat 헤더의 일부로 전달되는지 여부를 지정합니다. | |
반환 값에 대한 |
24.3.3.16. 예
예 24.7. “완전히 주석 처리됨 SEI” 는 완전히 주석이 달린 SEI를 표시합니다.
예 24.7. 완전히 주석 처리됨 SEI
package com.fusesource.demo; import javax.jws.*; import javax.xml.ws.*; import javax.jws.soap.*; import javax.jws.soap.SOAPBinding.*; import javax.jws.WebParam.*; @WebService(targetNamespace="http://demo.redhat.com", name="quoteReporter") @SOAPBinding(style=Style.RPC, use=Use.LITERAL) public interface quoteReporter { @WebMethod(operationName="getStockQuote") @RequestWrapper(targetNamespace="http://demo.redhat.com/types", className="java.lang.String") @ResponseWrapper(targetNamespace="http://demo.redhat.com/types", className="org.eric.demo.Quote") @WebResult(targetNamespace="http://demo.redhat.com/types", name="updatedQuote") public Quote getQuote( @WebParam(targetNamespace="http://demo.redhat.com/types", name="stockTicker", mode=Mode.IN) String ticker ); }
24.3.4. Apache CXF Annotations
24.3.4.1. WSDL 문서
24.3.4.1.1. @WSDL설명서 주석
@WSDL설명서
주석은 org.apache.cxf.annotations.WSDL설명서 인터페이스로 정의됩니다. SEI 또는 SEI 방법에 배치할 수 있습니다.
이 주석을 사용하면 SEI가 WSDL로 변환된 후 wsdl:documentation
요소에 표시되는 문서를 추가할 수 있습니다. 기본적으로 문서 요소는 포트 유형 내에 표시되지만 배치 속성을 지정하여 문서가 WSDL 파일의 다른 위치에 표시되도록 할 수 있습니다. 24.3.4.2절. “@WSDL설명서 속성” @WSDL설명서
주석에서 지원하는 속성을 표시합니다.
24.3.4.2. @WSDL설명서 속성
속성 | 설명 |
---|---|
| (필수) 문서 텍스트가 포함된 문자열입니다. |
| (선택 사항) WSDL 파일에서 이 문서가 표시되는 위치를 지정합니다. 사용 가능한 배치 값 목록은 “WSDL 계약에 배치” 을 참조하십시오. |
|
(선택 사항) 배치가 |
24.3.4.2.1. @WSDLDocumentationCollection 주석
@WSDLDocumentationCollection
주석은 org.apache.cxf.annotations.WSDLDocumentationCollection 인터페이스에 의해 정의됩니다. SEI 또는 SEI 방법에 배치할 수 있습니다.
이 주석은 단일 배치 위치 또는 다양한 배치 위치에 여러 문서 요소를 삽입하는 데 사용됩니다.
24.3.4.2.2. WSDL 계약에 배치
WSDL 계약에 문서가 표시되는 위치를 지정하려면 WSDL설명서.Placement
유형의 배치
속성을 지정할 수 있습니다. 배치에는 다음 값 중 하나가 있을 수 있습니다.
-
WSDLDocumentation.Placement.BINDING
-
WSDLDocumentation.Placement.BINDING_OPERATION
-
WSDLDocumentation.Placement.BINDING_OPERATION_FAULT
-
WSDLDocumentation.Placement.BINDING_OPERATION_INPUT
-
WSDLDocumentation.Placement.BINDING_OPERATION_OUTPUT
-
WSDLDocumentation.Placement.DEFAULT
-
WSDLDocumentation.Placement.FAULT_MESSAGE
-
WSDLDocumentation.Placement.INPUT_MESSAGE
-
WSDLDocumentation.Placement.OUTPUT_MESSAGE
-
WSDLDocumentation.Placement.PORT_TYPE
-
WSDLDocumentation.Placement.PORT_TYPE_OPERATION
-
WSDLDocumentation.Placement.PORT_TYPE_OPERATION_FAULT
-
WSDLDocumentation.Placement.PORT_TYPE_OPERATION_INPUT
-
WSDLDocumentation.Placement.PORT_TYPE_OPERATION_OUTPUT
-
WSDLDocumentation.Placement.SERVICE
-
WSDLDocumentation.Placement.SERVICE_PORT
-
WSDLDocumentation.Placement.TOP
24.3.4.2.3. @WSDL설명서 예
24.3.4.3절. “@WSDL설명서 사용” SEI 및 해당 메서드 중 하나에 @WSDL설명서
주석을 추가하는 방법을 보여줍니다.
24.3.4.3. @WSDL설명서 사용
@WebService @WSDLDocumentation("A very simple example of an SEI") public interface HelloWorld { @WSDLDocumentation("A traditional form of greeting") String sayHi(@WebParam(name = "text") String text); }
24.3.4.4절. “문서를 사용하여 생성된 WSDL” 에 표시된 WSDL이 24.3.4.3절. “@WSDL설명서 사용” 의 SEI에서 생성되는 경우 문서
요소의 기본 배치는 각각 PORT_TYPE
및 PORT_TYPE_OPERATION
입니다.
24.3.4.4. 문서를 사용하여 생성된 WSDL
<wsdl:definitions ... > ... <wsdl:portType name="HelloWorld"> <wsdl:documentation>A very simple example of an SEI</wsdl:documentation> <wsdl:operation name="sayHi"> <wsdl:documentation>A traditional form of greeting</wsdl:documentation> <wsdl:input name="sayHi" message="tns:sayHi"> </wsdl:input> <wsdl:output name="sayHiResponse" message="tns:sayHiResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> ... </wsdl:definitions>
24.3.4.4.1. @WSDLDocumentationCollection의 예
24.3.4.5절. “@WSDLDocumentationCollection 사용” SEI에 @WSDLDocumentationCollection
주석을 추가하는 방법을 보여줍니다.
24.3.4.5. @WSDLDocumentationCollection 사용
@WebService @WSDLDocumentationCollection( { @WSDLDocumentation("A very simple example of an SEI"), @WSDLDocumentation(value = "My top level documentation", placement = WSDLDocumentation.Placement.TOP), @WSDLDocumentation(value = "Binding documentation", placement = WSDLDocumentation.Placement.BINDING) } ) public interface HelloWorld { @WSDLDocumentation("A traditional form of Geeky greeting") String sayHi(@WebParam(name = "text") String text); }
24.3.4.6. 메시지의 스키마 유효성 검사
24.3.4.6.1. @SchemaValidation 주석
@SchemaValidation
주석은 org.apache.cxf.annotations.SchemaValidation 인터페이스에서 정의됩니다. SEI 및 개별 SEI 방법에 배치 할 수 있습니다.
이 주석은 이 엔드포인트로 전송된 XML 메시지의 스키마 유효성 검사를 켜집니다. 이 기능은 들어오는 XML 메시지의 형식에 문제가 있다고 의심되는 경우 테스트 목적에 유용할 수 있습니다. 기본적으로 검증은 성능에 상당한 영향을 미치기 때문에 비활성화되어 있습니다.
24.3.4.6.2. 스키마 검증 유형
스키마 유효성 검사 동작은 type
매개 변수에 의해 제어되며, 해당 값은 org.apache.cxf.annotations.SchemaValidation.SchemaValidationType
유형의 열거입니다. 24.3.4.7절. “스키마 유효성 검사 유형 값” 사용 가능한 검증 유형 목록을 표시합니다.
24.3.4.7. 스키마 유효성 검사 유형 값
유형 | 설명 |
---|---|
| 클라이언트 및 서버의 수신 메시지에 스키마 유효성 검사를 적용합니다. |
| 클라이언트 및 서버의 발신 메시지에 스키마 유효성 검사를 적용합니다. |
| 클라이언트와 서버의 수신 및 발신 메시지에 스키마 유효성 검사를 적용합니다. |
| 모든 스키마 유효성 검사는 비활성화되어 있습니다. |
| 메시지 요청에 스키마 검증을 적용합니다. 즉, 검증이 발신 클라이언트 메시지 및 수신 서버 메시지에 적용됩니다. |
| 응답 메시지에 스키마 유효성 검사를 적용하면 들어오는 클라이언트 메시지 및 발신 서버 메시지에 검증이 적용됩니다. |
24.3.4.7.1. 예
다음 예제에서는 MyService SEI를 기반으로 끝점에 대한 메시지의 스키마 유효성 검사를 활성화하는 방법을 보여줍니다. 주석을 SEI 전체 및 SEI의 개별 메서드에 어떻게 적용할 수 있는지 확인합니다.
@WebService @SchemaValidation(type = SchemaValidationType.BOTH) public interface MyService { Foo validateBoth(Bar data); @SchemaValidation(type = SchemaValidationType.NONE) Foo validateNone(Bar data); @SchemaValidation(type = SchemaValidationType.IN) Foo validateIn(Bar data); @SchemaValidation(type = SchemaValidationType.OUT) Foo validateOut(Bar data); @SchemaValidation(type = SchemaValidationType.REQUEST) Foo validateRequest(Bar data); @SchemaValidation(type = SchemaValidationType.RESPONSE) Foo validateResponse(Bar data); }
24.3.4.8. 데이터 바인딩 지정
24.3.4.8.1. @DataBinding 주석
@DataBinding
주석은 org.apache.cxf.annotations.DataBinding 인터페이스에서 정의합니다. 이는 SEI에 배치됩니다.
이 주석은 데이터 바인딩을 SEI와 연결하는 데 사용되며 기본 CryostatB 데이터 바인딩을 대체합니다. @DataBinding
주석의 값은 데이터 바인딩 ClassName.class를 제공하는 클래스
여야 합니다.
24.3.4.8.2. 지원되는 데이터 바인딩
현재 Apache CXF에서 지원하는 데이터 바인딩은 다음과 같습니다.
org.apache.cxf.jaxb.JAXBDataBinding
(기본값) 표준 Cryostat B 데이터 바인딩입니다.
org.apache.cxf.sdo.SDODataBinding
SDO(Service Data Objects) 데이터 바인딩은 Apache Tuscany SDO 구현을 기반으로 합니다. Maven 빌드 컨텍스트에서 이 데이터 바인딩을 사용하려면
cxf-rt-databinding-sdo
아티팩트에 종속성을 추가해야 합니다.org.apache.cxf.aegis.databinding.AegisDatabinding
Maven 빌드 컨텍스트에서 이 데이터 바인딩을 사용하려면
cxf-rt-databinding-aegis
아티팩트에 종속성을 추가해야 합니다.org.apache.cxf.xmlbeans.XmlBeansDataBinding
Maven 빌드 컨텍스트에서 이 데이터 바인딩을 사용하려면
cxf-rt-databinding-xmlbeans
아티팩트에 종속성을 추가해야 합니다.org.apache.cxf.databinding.source.SourceDataBinding
이 데이터 바인딩은 Apache CXF 코어에 속합니다.
org.apache.cxf.databinding.stax.StaxDataBinding
이 데이터 바인딩은 Apache CXF 코어에 속합니다.
24.3.4.8.3. 예
24.3.4.9절. “데이터 바인딩 설정” SDO 바인딩을 HelloWorld
SEI와 연결하는 방법 표시
24.3.4.9. 데이터 바인딩 설정
@WebService @DataBinding(org.apache.cxf.sdo.SDODataBinding.class) public interface HelloWorld { String sayHi(@WebParam(name = "text") String text); }
24.3.4.10. 메시지 압축
24.3.4.10.1. @GZIP 주석
@GZIP
주석은 org.apache.cxf.annotations.GZIP 인터페이스에서 정의합니다. 이는 SEI에 배치됩니다.
메시지의 GZIP 압축을 활성화합니다. GZIP는 협상된 개선 사항입니다. 즉, 클라이언트의 초기 요청이 압축되지 않지만 Accept
헤더가 추가되고 서버가 GZIP 압축을 지원하는 경우 응답이 압축되고 후속 요청도 발생합니다.
24.3.4.11절. “@GZIP 속성” @GZIP
주석에서 지원하는 선택적 속성을 표시합니다.
24.3.4.11. @GZIP 속성
속성 | 설명 |
---|---|
| 이 속성에서 지정한 크기보다 작은 메시지는 gzip이 아닙니다. 기본값은 -1(제한 없음)입니다. |
24.3.4.11.1. @FastInfoset
@FastInfoset
주석은 org.apache.cxf.annotations.FastInfoset 인터페이스에서 정의합니다. 이는 SEI에 배치됩니다.
메시지에 FastInfoset 형식을 사용할 수 있습니다. FastInfoset은 XML의 바이너리 인코딩 형식이며 메시지 크기와 XML 메시지의 처리 성능을 모두 최적화하는 것을 목표로 합니다. 자세한 내용은 Fast Infoset 의 다음 Sun 문서를 참조하십시오.
FastInfoset은 협상된 개선 사항입니다. 즉, 클라이언트의 초기 요청은 FastInfoset 형식이 아니지만 Accept
헤더가 추가되고 서버가 FastInfoset을 지원하는 경우 응답이 FastInfoset에 있고 후속 요청도 발생합니다.
24.3.4.12절. “@FastInfoset Properties” @FastInfoset
주석에서 지원하는 선택적 속성을 표시합니다.
24.3.4.12. @FastInfoset Properties
속성 | 설명 |
---|---|
|
협상 대신 FastInfoset 형식을 강제로 사용하는 부울 속성입니다. |
24.3.4.12.1. @GZIP 예
24.3.4.13절. “GZIP 활성화” HelloWorld
SEI에 대해 GZIP 압축을 활성화하는 방법을 보여줍니다.
24.3.4.13. GZIP 활성화
@WebService @GZIP public interface HelloWorld { String sayHi(@WebParam(name = "text") String text); }
24.3.4.13.1. @FastInfoset 시험
24.3.4.14절. “FastInfoset 활성화” HelloWorld
SEI에 대해 FastInfoset 형식을 활성화하는 방법을 보여줍니다.
24.3.4.14. FastInfoset 활성화
@WebService @FastInfoset public interface HelloWorld { String sayHi(@WebParam(name = "text") String text); }
24.3.4.15. 끝점에서 로깅 활성화
24.3.4.15.1. @logging 주석
@Logging
주석은 org.apache.cxf.annotations.Logging 인터페이스에서 정의합니다. 이는 SEI에 배치됩니다.
이 주석은 SEI와 연결된 모든 끝점에 로깅할 수 있습니다. 24.3.4.16절. “@logging 속성” 이 주석에서 설정할 수 있는 선택적 속성을 표시합니다.
24.3.4.16. @logging 속성
속성 | 설명 |
---|---|
| 로그에서 메시지를 잘린 것 이상으로 크기 제한을 지정합니다. 기본값은 64K입니다. |
|
들어오는 메시지를 기록할 위치를 지정합니다. < |
|
발신 메시지를 기록할 위치를 지정합니다. < |
24.3.4.16.1. 예
24.3.4.17절. “주석을 사용하여 로깅 구성” HelloWorld SEI에 대한 로깅을 활성화하는 방법을 보여줍니다. 여기서 들어오는 메시지가 < stdout
>으로 전송되고 발신 메시지가 < logger
>로 전송됩니다.
24.3.4.17. 주석을 사용하여 로깅 구성
@WebService @Logging(limit=16000, inLocation="<stdout>") public interface HelloWorld { String sayHi(@WebParam(name = "text") String text); }
24.3.4.18. 끝점에 속성 및 정책 추가
초록
속성 및 정책을 사용하여 구성 데이터를 엔드포인트와 연결할 수 있습니다. 여기서 중요한 차이점은 속성은 Apache CXF 특정 구성 메커니즘이지만 정책은 표준 WSDL 구성 메커니즘이라는 것입니다. 정책은 일반적으로 WS 사양 및 표준에서 시작되며 일반적으로 WSDL 계약에 표시되는 wsdl:policy
요소를 정의하여 설정합니다. 반면 속성은 Apache CXF 특정이며 일반적으로 Apache CXF Spring 구성 파일에서 jaxws:properties
요소를 정의하여 설정합니다.
그러나 여기에 설명된 대로 주석을 사용하여 Java에서 속성 설정 및 WSDL 정책 설정을 정의할 수도 있습니다.
24.3.4.19. 속성 추가
24.3.4.19.1. @EndpointProperty 주석
@EndpointProperty
주석은 org.apache.cxf.annotations.EndpointProperty
인터페이스에서 정의합니다. 이는 SEI에 배치됩니다.
이 주석은 Apache CXF별 구성 설정을 엔드포인트에 추가합니다. 끝점 속성은 Spring 구성 파일에 지정할 수도 있습니다. 예를 들어 엔드포인트에서 WS-Security를 구성하려면 다음과 같이 Spring 구성 파일에서 jaxws:properties
요소를 사용하여 엔드포인트 속성을 추가할 수 있습니다.
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" ... > <jaxws:endpoint id="MyService" address="https://localhost:9001/MyService" serviceName="interop:MyService" endpointName="interop:MyServiceEndpoint" implementor="com.foo.MyService"> <jaxws:properties> <entry key="ws-security.callback-handler" value="interop.client.UTPasswordCallback"/> <entry key="ws-security.signature.properties" value="etc/keystore.properties"/> <entry key="ws-security.encryption.properties" value="etc/truststore.properties"/> <entry key="ws-security.encryption.username" value="useReqSigCert"/> </jaxws:properties> </jaxws:endpoint> </beans>
또는 24.3.4.20절. “@EndpointProperty 주석을 사용하여 WS-Security 구성” 에 표시된 대로 @EndpointProperty
주석을 SEI에 추가하여 Java에서 이전 구성 설정을 지정할 수 있습니다.
24.3.4.20. @EndpointProperty 주석을 사용하여 WS-Security 구성
@WebService @EndpointProperty(name="ws-security.callback-handler" value="interop.client.UTPasswordCallback") @EndpointProperty(name="ws-security.signature.properties" value="etc/keystore.properties") @EndpointProperty(name="ws-security.encryption.properties" value="etc/truststore.properties") @EndpointProperty(name="ws-security.encryption.username" value="useReqSigCert") public interface HelloWorld { String sayHi(@WebParam(name = "text") String text); }
24.3.4.20.1. @EndpointProperties 주석
@EndpointProperties
주석은 org.apache.cxf.annotations.EndpointProperties
인터페이스에서 정의합니다. 이는 SEI에 배치됩니다.
이 주석은 여러 개의 @EndpointProperty
주석을 목록으로 그룹화하는 방법을 제공합니다. @EndpointProperties
를 사용하면 24.3.4.20절. “@EndpointProperty 주석을 사용하여 WS-Security 구성” 에 표시된 대로 24.3.4.21절. “@EndpointProperties 주석을 사용하여 WS-Security 구성” 를 다시 작성할 수 있습니다.
24.3.4.21. @EndpointProperties 주석을 사용하여 WS-Security 구성
@WebService @EndpointProperties( { @EndpointProperty(name="ws-security.callback-handler" value="interop.client.UTPasswordCallback"), @EndpointProperty(name="ws-security.signature.properties" value="etc/keystore.properties"), @EndpointProperty(name="ws-security.encryption.properties" value="etc/truststore.properties"), @EndpointProperty(name="ws-security.encryption.username" value="useReqSigCert") }) public interface HelloWorld { String sayHi(@WebParam(name = "text") String text); }
24.3.4.22. 정책 추가
24.3.4.22.1. @policy 주석
@Policy
주석은 org.apache.cxf.annotations.Policy
인터페이스에서 정의합니다. SEI 또는 SEI 방법에 배치할 수 있습니다.
이 주석은 WSDL 정책을 SEI 또는 SEI 메서드와 연결하는 데 사용됩니다. 정책은 표준 wsdl:policy
요소가 포함된 XML 파일을 참조하는 URI를 제공하여 지정합니다. WSDL 계약이 SEI(예: java2ws
명령줄 도구 사용)에서 생성되는 경우 이 정책을 WSDL에 포함할지 여부를 지정할 수 있습니다.
24.3.4.23절. “@policy 속성” @Policy
주석에서 지원하는 속성을 표시합니다.
24.3.4.23. @policy 속성
속성 | 설명 |
---|---|
| (필수) 정책 정의가 포함된 파일의 위치입니다. |
|
(선택 사항) WSDL을 생성할 때 생성된 계약에 정책을 포함할지 여부입니다. 기본값은 |
| (선택 사항) WSDL 파일에서 이 문서가 표시되는 위치를 지정합니다. 사용 가능한 배치 값 목록은 “WSDL 계약에 배치” 을 참조하십시오. |
|
(선택 사항) 배치가 |
24.3.4.23.1. @policies 주석
@Policies
주석은 org.apache.cxf.annotations.Policies
인터페이스에서 정의합니다. SEI 또는 SEI 방법에 배치 할 수 있습니다.
이 주석은 여러 개의 @Policy
주석을 목록으로 그룹화하는 방법을 제공합니다.
24.3.4.23.2. WSDL 계약에 배치
WSDL 계약에 정책이 표시되는 위치를 지정하려면 Policy.Placement
유형인 placement
속성을 지정할 수 있습니다. 배치에는 다음 값 중 하나가 있을 수 있습니다.
Policy.Placement.BINDING Policy.Placement.BINDING_OPERATION Policy.Placement.BINDING_OPERATION_FAULT Policy.Placement.BINDING_OPERATION_INPUT Policy.Placement.BINDING_OPERATION_OUTPUT Policy.Placement.DEFAULT Policy.Placement.PORT_TYPE Policy.Placement.PORT_TYPE_OPERATION Policy.Placement.PORT_TYPE_OPERATION_FAULT Policy.Placement.PORT_TYPE_OPERATION_INPUT Policy.Placement.PORT_TYPE_OPERATION_OUTPUT Policy.Placement.SERVICE Policy.Placement.SERVICE_PORT
24.3.4.23.3. @Policy 예
다음 예제에서는 WSDL 정책을 HelloWorld
SEI와 연결하는 방법과 정책을 sayHi
방법과 연결하는 방법을 보여줍니다. 정책 자체는 주석policies
디렉터리의 파일 시스템의 XML 파일에 저장됩니다.
@WebService @Policy(uri = "annotationpolicies/TestImplPolicy.xml", placement = Policy.Placement.SERVICE_PORT), @Policy(uri = "annotationpolicies/TestPortTypePolicy.xml", placement = Policy.Placement.PORT_TYPE) public interface HelloWorld { @Policy(uri = "annotationpolicies/TestOperationPTPolicy.xml", placement = Policy.Placement.PORT_TYPE_OPERATION), String sayHi(@WebParam(name = "text") String text); }
24.3.4.23.4. @Policies의 예
다음 예와 같이 @Policies
주석을 사용하여 여러 @Policy
주석을 목록으로 그룹화할 수 있습니다.
@WebService @Policies({ @Policy(uri = "annotationpolicies/TestImplPolicy.xml", placement = Policy.Placement.SERVICE_PORT), @Policy(uri = "annotationpolicies/TestPortTypePolicy.xml", placement = Policy.Placement.PORT_TYPE) }) public interface HelloWorld { @Policy(uri = "annotationpolicies/TestOperationPTPolicy.xml", placement = Policy.Placement.PORT_TYPE_OPERATION), String sayHi(@WebParam(name = "text") String text); }