0

アプリケーションをJBossAS7にデプロイしてからJettyにデプロイすると、RestEasyがPOJOをシリアル化したときに望ましくない違いに気づきました。Jettyでは、次のJSONがあります。

{
"pojo-name":{
    "lines":[
        {
            "code":"250-1",
            "id":1143,
         }]
    }
}

ただし、JBoss AS 7にデプロイすると、@XmlRootElementアノテーションによって指定された「pojo-name」が単に消えて次のようになります。

{
"lines":[
    {
        "code":"250-1",
        "id":1143,
    }]
}

次の依存関係を持つPOMファイルがあります。

  <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-jaxrs</artifactId>
      <version>${resteasy.version}</version>
      <scope>provided</scope>
  </dependency>
  <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-jaxb-provider</artifactId>
      <version>${resteasy.version}</version>
      <scope>provided</scope>
  </dependency>
  <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>jaxrs-api</artifactId>
      <version>${resteasy.version}</version>
      <scope>provided</scope>
  </dependency>
  <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-spring</artifactId>
      <version>${resteasy.version}</version>
      <exclusions>
          <exclusion>
              <artifactId>commons-logging</artifactId>
              <groupId>commons-logging</groupId>
          </exclusion>
          <exclusion>
              <artifactId>jaxb-impl</artifactId>
              <groupId>com.sun.xml.bind</groupId>
          </exclusion>
          <exclusion>
              <artifactId>sjsxp</artifactId>
              <groupId>com.sun.xml.stream</groupId>
           </exclusion>
           <exclusion>
              <artifactId>jsr250-api</artifactId>
              <groupId>javax.annotation</groupId>
           </exclusion>
           <exclusion>
              <artifactId>activation</artifactId>
              <groupId>javax.activation</groupId>
           </exclusion>
      </exclusions>
 </dependency>

私のPOJOクラスは次のようになります。

@XmlRootElement(name = "pojo-name")
public class LinesResponse implements Serializable {

    private static final long serialVersionUID = -8717658630497030320L;

    private List<Lines> lines;

    public LinesResponse() {}

    // Getters and setters
}

あなたの助けをいただければ幸いです!君たちありがとう。


編集:

JAXBプロバイダー間の競合の可能性に直面しているようです。たぶん、私のアプリがJettyを使用してデプロイされたとき、私はJettisonをJAXBプロバイダーとして取得し、JBossJacksonにデプロイされたときです。JBossのドキュメントから:

JacksonクラスにJAXBアノテーションが付けられていて、クラスパスにresteasy-jaxb-providerがある場合は、JettisionJAXBマーシャリングコードをトリガーできます。JAXB jsonマーシャラーをオフにするには、クラスで@ org.jboss.resteasy.annotations.providers.jaxb.IgnoreMediaTypes( "application / * + json")を使用します。

家に帰ったらすぐに、このアプローチを確実に試します。

4

1 に答える 1

0

上記の仮定を確認しただけです。これは、JAXB プロバイダー間の衝突でした。JBoss にデプロイされたとき、私のアプリは Jackson を使用し、Jetty では Jettison を使用していました。問題を解決するために、Jackson プロバイダーの使用を強制しました。

   <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jackson-provider</artifactId>
        <version>${resteasy.version}</version>
        <scope>provided</scope>
   </dependency>
于 2012-07-21T01:18:00.597 に答える