WADL 문제 / 계약 우선 접근 방식으로 Jersey를 사용하여 XSD 생성
저는 며칠 동안 Jersey를 사용하여 REST 웹 서비스에서 작업 해 왔으며 XML, JSON, Google Protobuf와 같은 여러 교환 형식으로 모든 CRUD 작업이 작동하도록 관리했습니다.
그러나 자동 생성 된 WADL 및 XSD와 관련된 몇 가지 문제가 있습니다.
석고
이 세 가지 형식으로 교환되는 객체를 정의하기 위해 "계약 우선"접근 방식을 따랐습니다 .
- 내가 XSD에서 JAXB를 사용하여 모델 클래스를 생성했습니다.
- 필자가 동등한 proto 파일에서 Google Protobuf 클래스를 생성했습니다 (내부적으로 하나의 고유 한 모델을 갖기 위해이를 JAXB 생성로 변환하는 방법이 있습니다).
그러나 사용자가 자신의 클래스 를 생성 할 수 있기 때문에 바라기 때문에 스키마 파일 (.xsd 및 .proto)을 공유 하고 자동 생성 된 WADL과 잘 통합하고 싶습니다 .
이를 위해 위키 페이지 덕분에 :
- 아래에 두 파일을 노출했습니다.
/schema/schema.xsd
/schema/schema.proto
응용 프로그램 문법 파일을 추가했습니다.
<?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(); } }
이렇게하면 WADL에 다음과 같이 표시 /rest/application.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
. 또한 wadl2java
이 WADL 과 같은 도구를 호출하는 것은 비참하게 실패합니다.
/schema/schema.xsd
, 및/rest/application.wadl/xsd0.xsd
이제 충돌합니다 (동일한 개체에 대한 두 가지 정의).
질문
이 자동 생성 XSD의 생성 및 확산을 비활성화하는 방법이 있습니까? (이 "계약 우선"접근 방식을 따르기 때문에 필요하지 않기 때문에)
그렇지 않은 경우,
/rest/application.wadl/xsd0.xsd
히트 시 수동으로 작성한 XSD로 컨텐츠를 "재정의"하는 방법 이 있습니까? (사용자 지정 WADL을 생성하기 위해 WadlResource에 대해 검색했지만 XSD 생성 자체에 대해서는 아무것도 찾지 못했습니다)
도움에 미리 감사드립니다!
미디엄.
편집하다
1) Jersey 팀에 문제를 제기하고 답장을 받았습니다. http://java.net/projects/jersey/lists/users/archive/2012-06/message/8
2) Pavel의 지시에 따라 티켓 (JERSEY-1230)을 제기했습니다. 현재 직접 수정 사항을 제출하거나 Jersey 팀으로부터 수정 사항을 받기 위해 후속 조치를 취하고 있습니다.
1.14-SNAPSHOT 을 사용하면 다음을 수행 할 수 있습니다.
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();
}
}
overrideGrammars가 true로 설정되면 Jersey에서 생성 한 문법이 반환 된 WADL에 포함되지 않습니다.
'ProgramingTip' 카테고리의 다른 글
Android API> = 24에서 java.lang.IllegalArgumentException으로 활동을 재개 할 수 없습니다. (0) | 2021.01.08 |
---|---|
Windows Server 2008 R2에서 실행되는 MSDN PeerChannel“SecureChat”받기 (0) | 2021.01.08 |
프로그래밍 방식으로 Whatsapp 연락처 새로 고침 (0) | 2021.01.08 |
기기에서 읽은 Android USB 호스트 (0) | 2021.01.08 |
C ++ 11 퓨처 사용 : std :: async 퓨의 중첩 된 호출 충돌 : 컴파일러 / 표준 라이브러리? (0) | 2021.01.08 |