質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

パース

パースとは、一定の文法に従って記述されたテキスト文書を解析し、データ構造の集合体に分解・変換することを呼びます。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

1281閲覧

kotlin + Spring-Cloud-OpenFeignを用いて外部APIのレスポンス(xml形式)をパースしたい

o-sei

総合スコア1

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

パース

パースとは、一定の文法に従って記述されたテキスト文書を解析し、データ構造の集合体に分解・変換することを呼びます。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/07/06 08:49

編集2020/07/08 07:59

前提・実現したいこと

下記の要件を満たすAPIを最終的に作成しようとしています。

  • リクエスト受信時、xml形式のレスポンスを返す外部のAPIを叩き、Json形式に変換しレスポンスとして返却するAPI
  • 外部のAPIはspring cloud openfeignを用いて叩く

それにあたって、まずは外部APIのxml形式のレスポンスをパースし、data classとしてプログラム内に保持しようとしています。

発生している問題

下記のブログ記事等を参考に実装しているのですが、
Spring Cloud OpenFeignさわる - kagamihogeの日記

こちらの「CustomConfigration」クラスの下記部分が何をしているのか分からず、kotlinでどう書けばいいか分からず困っています。

@Configuration public class CustomConfigration { @Bean public Decoder feignDecoder() { MappingJackson2XmlHttpMessageConverter c = new MappingJackson2XmlHttpMessageConverter(); ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(c); // この処理が何をしているのか分からないです.. return new ResponseEntityDecoder(new SpringDecoder(objectFactory)); } }

こちらの処理は何をしているのでしょうか? また、kotlinにはどう書き直せばよいのでしょうか。
また、そもそも自分のやり方が見当違いであればお手数ですが教えていただけるとありがたいです。

実装中のソースコード

// SearchFeign.kt @FeignClient(value = "SearchFeign", url = "http://test", configuration = "XmlDecodeConfig.class") interface SearchFeign { @RequestMapping(method = [RequestMethod.GET], value = ["/searchItems"]) fun getSearchResult(): ResponseEntity }
// XmlDecodeConfig.kt @Configuration class XmlDecodeConfig { @Bean fun feignDecoder() : Decoder { val c = MappingJackson2XmlHttpMessageConverter() val objectFactory = //何を書けばいいのか分からない return ResponseEntityDecoder(SpringDecoder(objectFactory)) } }
// SampleRepositoryImpl.kt @Repository class SampleRepositoryImpl() : SampleRepository { @Autowired lateinit var SearchFeign: SearchFeign override fun search(): String { val response = SearchFeign.getSearchResult() return "feign test" //return response } }
data class ResponseEntity (val ResultSet: ResultSetEntity)
data class ResultSetEntity (val Result : ResultEntity)
// とりあえずResultTypeだけでも受け取れるようにしたい data class ResultEntity (val ResultType : String = "")

外部APIのレスポンスサンプル

<?xml version="1.0" ?> <ResultSet> <Result> <Request> <Query/> <uri>http://test.........</uri> <listing_restriction/> <IsSolr>1</IsSolr> </Request> <DumpUUID>0f4cb656-0a40-4872-a116-17b7ddfb0c64</DumpUUID> <Modules/> <SpaceId categoryId="1"/> <Campaign inSession="true">001</Campaign> : <ResultType>NORMAL</ResultType> : </Result> </ResultSet>

わかっていること

調べたところラムダ式の無名クラスの記法のようですが、上記のような記法は使ったことがなく自分の中で落とし込めませんでした...
Java8のラムダ式を理解する - Qiita

補足情報(FW/ツールのバージョンなど)

開発環境:IntelliJ IDEA
Java version : 11.0.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

https://www.codeflow.site/ja/article/jackson-convert-xml-json

jacson のライブラリを利用したら?

投稿2020/07/06 09:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

o-sei

2020/07/07 02:51

リンク先確認しました。利用できそうですね...実装してみます! ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問