Java Reference
In-Depth Information
...
the implementation
...
}
public
public
StreamingOutput
getCustomer
(
int
int
id
)
...
the implementation
...
}
public
public
void
int
id
,
InputStream is
) {
...
the implementation
...
void
updateCustomer
(
int
}
As you can see, no JAX-RS annotations are needed within the implementing class. All our
metadata is confined to the
CustomerResource
interface.
If you need to, you can override the metadata defined in your interfaces by reapplying an-
notations within your implementation class. For example, maybe we want to enforce a spe-
cific character set for POST XML:
public
public class
class
CustomerResourceService
CustomerResourceService
implements
implements
CustomerResource
{
@POST
@Consumes
(
"application/xml;charset=utf-8"
)
public
public
Response
createCustomer
(
InputStream is
) {
...
the implementation
...
}
In this example, we are overriding the metadata defined in an interface for one specific meth-
od. When overriding metadata for a method, you must respecify all the annotation metadata
for that method even if you are changing only one small thing.
Overall, I do not recommend that you do this sort of thing. The whole point of using an inter-
face to apply your JAX-RS metadata is to isolate the information and define it in one place.
If your annotations are scattered about between your implementation class and interface,
your code becomes a lot harder to read and understand.
Inheritance
The JAX-RS specification also allows you to define class and interface hierarchies if you so
desire. For example, let's say we wanted to make our
outputCustomer()
and
readCus-
tomer()
methods abstract so that different implementations could transform XML how they
wanted:
package
package
com
.
restfully
.
shop
.
services
;
import
import
...
...
;