PUT和POST无法在J2SE平台上运行(RESTLET版本3.0-M1)

时间:2015-02-19 11:21:19

标签: java json restlet

我正在与GWT和J2SE客户合作一个项目。 GWT部分运行良好,但现在J2SE客户端存在问题;

  

"服务器了解请求实体的内容类型和   请求实体的语法是正确的,但无法处理   包含说明"

     

"序列化表示必须具有以下媒体类型:   application / x-java-serialized-object或者这个:   应用程序/ x-java的序列化对象+ XML"

ERROR MESSAGE

此代码在几个月/之前的版本中运行... PET和POST都会在GET工作时产生此错误。 这里有什么问题?

这是一个非常简单的测试用例

//共享接口

public interface J2SeClientServerResourceInt
{
   @Post("json")
   public J2seStatusDto postJ2seStatus(J2seStatusDto pJ2seStatusDto);
}

// Java Bean

  public class J2seStatusDto implements Serializable
    {
        private static final long serialVersionUID = 6901448809350740172L;

        private String mTest;

        public J2seStatusDto()
        {
        }

        public J2seStatusDto(String pTest)
        {
            setTest(pTest); 
        }

        public String getTest()
        {
            return mTest;
        }

        public void setTest(String pTest)
        {
            mTest = pTest;
        }
    }

//服务器

public class J2seServerResource extends ClaireServerResource implements J2SeServerResourceInt
{
    @Override
    public J2seStatusDto postJ2seStatusDto(J2seStatusDto pJ2seStatusDto)
    {
        return pJ2seStatusDto;
    }
}

// J2SE客户端

public class ClaireJsSeTestClient
{
    public static void main(String[] args)
    {
        Reference lReference = new Reference("http://localhost:8888//rest/j2se");
        ClientResource lClientResource = new ClientResource(lReference);
        lClientResource.accept(MediaType.APPLICATION_JSON);
        J2SeServerResourceInt lJ2SeServerResource = lClientResource.wrap(J2SeServerResourceInt.class);
        J2seStatusDto lJ2seStatusDto = new J2seStatusDto("TEST");
        J2seStatusDto lJ2seResultDto = lJ2SeServerResource.postJ2seStatusDto(lJ2seStatusDto);
    }
}

// Maven J2Se Client

   <dependencies>
        <dependency>
            <groupId>org.restlet.jse</groupId>
            <artifactId>org.restlet</artifactId>
            <version>3.0-M1</version>
        </dependency>
        <dependency>
            <groupId>org.restlet.jse</groupId>
            <artifactId>org.restlet.ext.jackson</artifactId>
            <version>3.0-M1</version>
        </dependency>
    </dependencies>

// Maven GAE Server

  <dependency>
        <groupId>org.restlet.gae</groupId>
        <artifactId>org.restlet</artifactId>
        <version>3.0-M1</version>
    </dependency>
    <dependency>
        <groupId>org.restlet.gae</groupId>
        <artifactId>org.restlet.ext.servlet</artifactId>
        <version>3.0-M1</version>
    </dependency>
    <dependency>
        <groupId>org.restlet.gae</groupId>
        <artifactId>org.restlet.ext.jackson</artifactId>
        <version>3.0-M1</version>
    </dependency>
    <dependency>
        <groupId>org.restlet.gae</groupId>
        <artifactId>org.restlet.ext.gwt</artifactId>
        <version>3.0-M1</version>
    </dependency>
    <dependency>
        <groupId>org.restlet.gwt</groupId>
        <artifactId>org.restlet</artifactId>
        <version>3.0-M1</version>
        <scope>compile</scope>
    </dependency>

1 个答案:

答案 0 :(得分:0)

Thierry Boileau解决了我们的问题(错误);

https://github.com/restlet/restlet-framework-java/issues/1029#issuecomment-76212062

由于GAE平台的限制(不支持分块编码),您必须指定首先缓冲请求实体;

cr.setRequestEntityBuffering(true);

感谢restlet.com的大力支持