@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); }
org.apache.cxf.annotations.DataBinding (since 2.2.4)Sets the DataBinding class that is associated with the service. By default, CXF assumes you are using the JAXB data binding. However, CXF supports different databindings such as XMLBeans, Aegis, SDO, and possibly more. This annotation can be used in place of configuration to select the databinding class. @DataBinding(org.apache.cxf.sdo.SDODataBinding.class) public interface MyService { public commonj.sdo.DataObject echoStruct( commonj.sdo.DataObject struct ); } org.apache.cxf.annotations.Logging (since 2.3)Turns on logging for the endpoint. Can be used to control the size limits of what gets logged as well as the location. It supports the following attributes:
@Logging(limit=16000, inLocation="<stdout>") public interface MyService { String echoString(String s); } org.apache.cxf.annotations.GZIP (since 2.3)Enables GZIP compression of on-the-wire data. Supported attributes:
GZIP is a negotiated enhancement. An initial request from a client will not be gzipped, but an Accept header will be added and if the server supports it, the response will be gzipped and any subsequent requests will be. org.apache.cxf.annotations.FastInfoset (since 2.3)Enables FastInfoset of on-the-wire data. Supported attributes:
FastInfoset is a negotiated enhancement. An initial request from a client will not be in fastinfoset, but an Accept header will be added and if the server supports it, the response will be in fastinfoset and any subsequent requests will be. org.apache.cxf.annotations.EndpointProperty |
uri | REQUIRED the location of the file containing the Policy definition |
includeInWSDL | Whether to include the policy in the generated WSDL when generating a wsdl. Default is true |
placement | Specify where to place the policy |
faultClass | if placement is a FAULT, this specifies which fault the policy would apply to |
When using a custom Spring configuration, you need to import META-INF/cxf/cxf-extension-policy.xml
@Policies({ @Policy(uri = "annotationpolicies/TestInterfacePolicy.xml"), @Policy(uri = "annotationpolicies/TestImplPolicy.xml", placement = Policy.Placement.SERVICE_PORT), @Policy(uri = "annotationpolicies/TestPortTypePolicy.xml", placement = Policy.Placement.PORT_TYPE) } ) @WebService public static interface TestInterface { @Policies({ @Policy(uri = "annotationpolicies/TestOperationPolicy.xml"), @Policy(uri = "annotationpolicies/TestOperationInputPolicy.xml", placement = Policy.Placement.BINDING_OPERATION_INPUT), @Policy(uri = "annotationpolicies/TestOperationOutputPolicy.xml", placement = Policy.Placement.BINDING_OPERATION_OUTPUT), @Policy(uri = "annotationpolicies/TestOperationPTPolicy.xml", placement = Policy.Placement.PORT_TYPE_OPERATION), @Policy(uri = "annotationpolicies/TestOperationPTInputPolicy.xml", placement = Policy.Placement.PORT_TYPE_OPERATION_INPUT), @Policy(uri = "annotationpolicies/TestOperationPTOutputPolicy.xml", placement = Policy.Placement.PORT_TYPE_OPERATION_OUTPUT) } ) int echoInt(int i); }
Used on the JAX-WS service implementation object to mark a method as preferring the 'async' version of the method instead of the synchronous version. With JAX-WS, services default to the synchronous methods that require the returning value to be returned from the method. By marking a method with the @UseAsyncMethod annotation, if the transport supports it, CXF will call the async version that takes an AsyncHandler object and the service can call that handler when the response is ready. If the transport does not support the CXF continuations, the synchronous method will be called as normal.
@UseAsyncMethod public String greetMeSometime(String me) { LOG.info("Executing operation greetMeSometime synchronously"); System.out.println("Executing operation greetMeSometime synchronously\n"); return "How are you " + me; } public Future<?> greetMeSometimeAsync(final String me, final AsyncHandler<GreetMeSometimeResponse> asyncHandler) { LOG.info("Executing operation greetMeSometimeAsync asynchronously"); System.out.println("Executing operation greetMeSometimeAsync asynchronously\n"); final ServerAsyncResponse<GreetMeSometimeResponse> r = new ServerAsyncResponse<GreetMeSometimeResponse>(); new Thread() { public void run() { GreetMeSometimeResponse resp = new GreetMeSometimeResponse(); resp.setResponseType("How are you " + me); r.set(resp); System.out.println("Responding on background thread\n"); asyncHandler.handleResponse(r); } } .start(); return r; }