2010-05-20 6 views
12

xsd 파일 Foo.xsd가 있습니다. WSDL 파일에서이를 참조하는 방법을 시도했지만 작동하지 않습니다.xsd 파일에서 스키마 위치를 지정하는 방법은 무엇입니까?

1) 로컬 파일 시스템에서 XSD 파일을 배치하고

<xsd:import namespace="http://ws.test.com/" schemaLocation="file:///D:/wsdl/Foo.xsd"></xsd:import> 

2) 웹 루트 폴더에있는 XSD 파일을 배치로 가져오고 나는 클라이언트를 실행하면

<xsd:import namespace="http://ws.test.com/" schemaLocation="http://localhost:8080/Xfire/Foo.xsd"></xsd:import> 

로 가져 응답 객체의 필드에 대해 null이 반환됩니다. 하지만 이것은 타입 정의를 WSDL 자체에 내장 할 때 작동합니다.

외부 xsds에 대한 경로를 어떻게 지정합니까?

웹 서비스 생성에 xFire 1.2.6을 사용하고 있습니다. 클라이언트는 xFire WSGen ant 태스크를 사용하여 생성됩니다.

+0

파일을 직접 참조하는 경우 빌드 시간 대 런타임 경로를주의하십시오. 나는 이것에 문제가 있었고 대신에 uri를 참조하는 나의 참조 용 서버에 xsds를 호스팅하는 것을 끝내었다. –

답변

16

WSDL은 모든 호스트에서 HTTP를 통해 액세스하므로 클라이언트는 파일 URL이나 로컬 호스트 (사용자의 서버가 아닌 자체 호스트)에 액세스 할 수 없습니다.

상대 경로 :

<xsd:import namespace="http://ws.test.com/" schemaLocation="../Foo.xsd"/> 

절대 경로 : 가장 좋은 방법은 XSD 파일에 파일 경로가 될 것입니다

<xsd:import namespace="http://ws.test.com/" schemaLocation="/myapp/Foo.xsd"/> 

당신의 컨텍스트 경로를 알 필요가 절대 경로에 대한 webapp, 그래서 나는 상대 경로를 선호합니다.

+1

schemaLocation = "/ xfire/Foo.xsd"를 사용하여 상대 경로를 시도했습니다. org.codehaus.xfire.XFireRuntimeException : 스키마 부분을 찾을 수 없습니다. xFire 1.2.6 Webservices 생성에 사용됩니다. – Manoj

+0

상대 경로는 /로 시작하지 않습니다./xfire가 webapp의 컨텍스트 경로입니까? –

+0

나의 프로젝트는 maven 다. 다중 모듈 프로젝트는 ../foo.xsd를 주었다. 이 모듈 만 있으면 XSD를 찾고 성공할 수 있습니다. 부모로부터 빌드하면 상위 루트 위치의 XSD를 검색하고 빌드가 실패합니다. 프로젝트가 다중 모듈 인 경우 xsd 위치를 지정하는 방법에 대한 아이디어 –

관련 문제