2012-06-03 4 views
55

지금 Jersey를 사용하여 REST 웹 서비스를 며칠 동안 사용해 왔으며 모든 CRUD 작업을 여러 가지 교환 형식 (XML, JSON, Google Protobuf.계약 우선 접근 방식의 저지를 사용하는 WADL/생성 된 XSD의 문제

그러나 WADL 및 XSD가 자동으로 생성되는 것과 관련된 몇 가지 문제에 직면하고 있습니다. 상황이

객체가이 세 가지 형식으로 교환 정의하려면, 나는 "계약 우선"접근 따랐다


: 내가 쓴 XSD에서

  • 을, 나는 생성 된 내 JAXB를 사용하는 모델 클래스;
  • 필자가 작성한 동등한 proto 파일에서 Google Protobuf 클래스를 생성했습니다 (내부적으로 하나의 고유 한 모델을 갖기 위해 이들을 JAXB 생성 객체로 변환하는 방법이 있습니다). 그러나

, 나는 수업이도, 나는이 스키마 파일 (.XSD 및 .proto)를 공유하고 잘 자동으로 생성과 통합을 하고 싶은 생성 할 수 있도록 내 사용자가 원하는만큼 WADL. this 위키 페이지에 그 목적

, 감사 :

  • 나는이 애플리케이션 -을 추가 한
    • /schema/schema.xsd
    • /schema/schema.proto
  • 에서 두 파일을 노출 한 문법 파일 :

    (210)
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <grammars xmlns="http://wadl.dev.java.net/2009/02" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
          xmlns:xi="http://www.w3.org/1999/XML/xinclude"> 
        <include href="../schema/schema.xsd" /> 
    </grammars> 
    
  • 나는 사용자 정의 WADL 생성기를 추가 한 :

    public class RichWadlGeneratorConfig extends WadlGeneratorConfig { 
        @Override 
        public List<WadlGeneratorDescription> configure() { 
         return generator(WadlGeneratorApplicationDoc.class) 
          .prop("applicationDocsStream", "application-doc.xml") 
          .generator(WadlGeneratorGrammarsSupport.class) 
          .prop("grammarsStream", "application-grammars.xml") 
          .descriptions(); 
        } 
    } 
    

내가 /rest/application.wadl 명중 아래 WADL에 나타나는이 방법 :

<grammars> 
    <include href="../schema/schema.xsd"/> 
    <include href="application.wadl/xsd0.xsd"> 
      <doc title="Generated" xml:lang="en"/> 
    </include> 
</grammars> 

문제

/rest/application.wadl/xsd0.xsd은 수업에서 자동으로 생성되지만, 처음에는 schema.xsd에있는 것과 다른 과 다른입니다.이 WADL에 wadl2java 같은 도구를 호출하는 것에 더하여 는

  • /rest/application.wadl/xsd0.xsd
  • 지금 (동일 목적을위한 두 정의)에 충돌되어, 비참 아마도 때문에

    • /schema/schema.xsd
    • 실패.


      질문
      1. 이 자동으로 생성 된 XSD의 생성과 확산을 해제하는 방법이 있나요

      ? 그렇지 않으면

    • (I이 "계약 우선"접근 방식을 다음있어 이후 필요하지 않기 때문에) /rest/application.wadl/xsd0.xsd이 명중 할 때 , 방법을 "재정의"내 수동으로 작성 XSD와 그 내용이 무엇입니까? 는 (내가 주변에 검색 좀 및 사용자 정의 WADL를 생성하기 위해, WadlResource에 대해 찾았지만 XSD 생성 자체에 대해 아무것도 발견) 당신의 도움을 사전에


    • 감사합니다!

      M.


      편집

      1) 나는 뉴저지 팀에 문제를 제기하고 응답을 얻었다 : 나는 티켓을 제기) http://java.net/projects/jersey/lists/users/archive/2012-06/message/8

      2 (JERSEY-1230) , Pavel의 지시에 따르면. 현재 나에게 직접 수정본을 제출하거나 저지 팀으로부터 수정본을받는 중입니다.

    +2

    문제가 해결되었습니다. http://java.net/jrow/browse/JERSEY-1230 –

    +0

    위의 내용을 질문에 대한 답변으로 게시 한 다음 동의해야합니다 (응답되지 않은 Q의 목록에서 해당 내용을 지우려면).). – scottb

    답변

    1

    1.14-SNAPSHOT하면이 작업을 수행 할 수 있도록해야합니다

    overrideGrammars가 true로 설정되어
    public class SampleWadlGeneratorConfig extends WadlGeneratorConfig { 
    
        @Override 
        public List<WadlGeneratorDescription> configure() { 
         return generator(WadlGeneratorApplicationDoc.class) 
           .prop("applicationDocsStream", "application-doc.xml") 
           .generator(WadlGeneratorGrammarsSupport.class) 
           .prop("grammarsStream", "application-grammars.xml") 
           .prop("overrideGrammars", true)        // !!! 
           .generator(WadlGeneratorResourceDocSupport.class) 
           .prop("resourceDocStream", "resourcedoc.xml") 
           .descriptions(); 
        } 
    
    } 
    

    는 뉴저지는 문법이 반환 WADL에 포함되지 않습니다 생성.