4

以下をブラウザに返してもらいたい(ソースを表示)

<content>
<![CDATA[Please show this inside a unescaped CDATA tag]]>
</content>

しかし、私は実際に得る

<content>
Please show this inside a unescaped CDATA tag
</content>

もし、コンテンツの値を

< ;![CDATA[これをエスケープされていない CDATA タグ内に表示してください]]> ; 、タグの小なりおよび大なりはエスケープされます。

私が望んでいたことを達成する方法を疑問に思いますか????

これが私のコードです

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/myRequest")
public class MyRestClass {

    @GET
    @Path("{myPathNumber}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public Object doInquiry(@PathParam("myPathNumber") String myPathNumber) {
        try {
            return new MyObject();
        } catch (Exception e) {
            return "exception " + e.getMessage();
        }
    }
}
package org.openengine.wink;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlCDATA;

@XmlRootElement
public class MyObject implements Serializable {

    @XmlElement 
    @XmlCDATA
    private String content = "Please show this inside a unescaped CDATA tag";

}

パッケージには、次の内容org.openengine.winkのファイルがありますjaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
4

1 に答える 1

4

クラスパス

私の最善の推測は、EclipseLink JAXB (MOXy)がクラスパスで正しく構成されておらず、JAXB RI が環境内の JAXB (JSR-222) プロバイダーとして使用されていることです。


メタデータ

あなたが提供したEclipseLink JAXB (MOXy)メタデータは正しいようです。これは、次のスタンドアロン デモ コードで確認できます。

MyObject

デフォルトでは、 JAXB (JSR-222)実装はプロパティ (getter/setter) でメタデータを探します。フィールドに注釈を付けたので、@XmlAccessorType(XmlAccessType.FIELD注釈を使用することをお勧めします ( http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.htmlを参照)。

package org.openengine.wink;

import java.io.Serializable;
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlCDATA;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class MyObject implements Serializable {

    @XmlElement 
    @XmlCDATA
    private String content = "Please show this inside a unescaped CDATA tag";

}

jaxb.properties

MOXy を JAXB プロバイダーとして指定するには、クラスパスに EclipseLink バイナリを配置jaxb.propertiesし、次のエントリを使用してドメイン モデルと同じパッケージでファイルを呼び出す必要があります ( http://blog.bdoughan.com/2011/05を参照)。 /specifying-eclipselink-moxy-as-your.html )。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

デモ

package org.openengine.wink;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(MyObject.class);

        MyObject myObject = new MyObject();

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(myObject, System.out);
    }

}

出力

<?xml version="1.0" encoding="UTF-8"?>
<myObject>
   <content><![CDATA[Please show this inside a unescaped CDATA tag]]></content>
</myObject>

詳細については

于 2012-11-01T19:31:31.963 に答える