JAX-RS の CXF 実装を使用して、クライアントで PATCH メソッドを使用しようとしています。最初に、PATCH アノテーションを次のように定義しました。
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@HttpMethod("PATCH")
public @interface PATCH {
}
ここに書かれていることを参照してください: How to have a @PATCH Annotation for JAX-RS?
その後、@PATCH が CXF 3.1.2 に追加されたことがわかったので、Maven の pom.xml のバージョンを変更しました。実際にはそこpublic @interface PATCH
にpackage org.apache.cxf.jaxrs.ext;
あり、コードは実際に上に投稿したものとまったく同じように見えます。
ただし、サービス定義でこの注釈を使用しようとすると、
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface AbcService {
@PATCH
@Path("/abc/efg")
public SomeDTO patchSomething(RequestObject request);
}
上にjava.net.ProtocolException: Invalid HTTP method: PATCH
投稿した質問のリンクで述べたようになります。彼らはこれに対するいくつかの解決策をJerseyと話し合っていますが、CXFでできることは次のとおりです。
AbcService abcService = JAXRSClientFactory.create(myURI, AbcService.class, myProviders, true);
abcService.patchSomething(new RequestObject('something'));
だから私はいくつかの質問があります:
- どうすればこれを機能させることができますか? いいえ、カスタム CXF インターセプターを作成する必要がありますか?
- 機能しない場合、PATCH アノテーションを CXF に追加したのはなぜですか?
- 他のトピックの一部の人は、言及された PATCH 注釈定義が彼らのために機能すると言いました。どうして ?クライアント側でのみ問題が発生しますか?もしそうなら、それはなぜですか?
- CXF ドキュメントでこの注釈が見つからないのはなぜですか? http://cxf.apache.org/javadoc/latest/でorg.apache.cxf.jaxrs.ext パッケージを調べましたが、PATCH が表示されません。しかし、最新の cxf 3.1.2 では、このパッケージで実際に見つけることができます。