2013-11-22 3 views
9

pom.xml이 작동하는 웹 서비스에 대한 클라이언트를 생성 자동으로 다음이 포함되어 내하는 WSDL은 아래에 지정된 데 :"기본 wsdl을 초기화 할 수 없습니다 ..."- 이유가 무엇입니까?

 <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-codegen-plugin</artifactId> 
      <version>2.3.1</version> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <configuration> 
         <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot> 
         <wsdlOptions> 
          <wsdlOption> 
           <wsdl>${basedir}/src/main/wsdl/myclient.wsdl</wsdl> 
           <extraargs> 
            <extraarg>-client</extraarg> 
            <extraarg>-verbose</extraarg> 
           </extraargs> 
           <wsdlLocation>wsdl/myclient.wsdl</wsdlLocation> 
          </wsdlOption> 
         </wsdlOptions> 
        </configuration> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

이 프로젝트는 오류나 경고없이, 잘 구축하고 난에 파일 myclient.wsdl을 볼 수 있습니다 JAR 파일은 wsdl 폴더 바로 아래에 있습니다.

하지만 그 JAR 실행하려고하면

java -Xmx1028m -jar myclient-jar-with-dependencies.jar 

그것은

왜 "WSDL/myclient.wsdl에서 기본 WSDL을 초기화 할 수 없습니다"고 불만을?

무엇이 누락 되었습니까?

어떻게 pom.xml 파일 에서 wsdl/myclient.wsdl는 클라이언트의 JAR 런타임에 불만을 만드는,로 변환하는 것이 어떤 경로를 을 찾을 수 있습니다

?

업데이트 : 나는 자동 생성 된 코드를 수정하는 것을 포함 몇 가지 솔루션/해결 방법을 알고 :

  1. 패스 "널 (null)"은 WSDL URL에 대한 다음 ((BindingProvider) 포트)를 사용합니다. getRequestContext(). put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://example.com/ ....") 주소를 설정하십시오.
  2. WSDL을 Java 자원으로로드하고 pass its location into your service's constructor을로드하십시오.

는하지만 같은 pom.xml에 올바른 값을 입력해야하는 솔루션에 더 많은 관심을 오전 classpath approach (하지만 불행히도 클래스 경로는 어떤 이유로 나를 위해 작동하지 않았다).

내가 대신 입력해야하는 아이디어가 있습니까? 분명히 이것은 특정 플러그인에 대한 올바른 경로 규칙을 알아내는 아주 간단한 경우이지만, 나는 뭔가를 놓치고 있으며 그 경로가 무엇인지 알지 못합니다.

답변

1

cfx examplessourceRoot, wsdlwsdlLocation에 약간 다른 위치를 사용합니다.

일반적으로 src/main/resources의 파일은 제작 된 이슈에 포함됩니다. 알려진 잘못된 경로로 의심

  • 설정 경로를 볼 :

    <resources> 
        <resource> 
         <directory>src/main/wsdl</directory> 
        </resource> 
    </resources> 
    

    팁 : 포함 할 src/main/wsdl에있는 파일에 대한 위해서는, pom.xml 파일에 리소스로 추가해야 같은 오류 메시지가 나타나면

  • 생성 된 *.jar- 파일의 압축을 풀고 wsdl이 포함되어 있는지 경로가 무엇인지 확인하십시오.
+0

+1 그리고 그것이 내가 내 문제를 해결하기 위해 한 것이기 때문에 받아 들였습니다. 그러나 pom.xml의 wsdl/myclient.wsdl이 런타임에 **로 변환되는 경로를 찾는 방법은 아직 미스터리입니다 ** ** – Withheld

2

오류는 생성 된 서비스 클래스 (@WebServiceClient에 의해 주석 됨)의 정적 초기화 프로그램에서 비롯됩니다. wsdl 파일을 자원으로로드하려고 시도합니다. 생성기는 wsdlLocation 매개 변수로 제공 한 값을 사용합니다. WSDL에이 클래스 경로 폴더의 루트에 직접 위치해 있습니다

<wsdlLocation>myclient.wsdl</wsdlLocation> 

때문에 : 당신은 "WSDL /"접두사를 멀리 떠나야한다.

BTW : 매개 변수 < wsdlLocation> 매개 변수 < wsdl> 값을 사용하면 (런타임에는 올바르지 않지만 제공된 URL이 원격 URL 주소 일 경우 올바를 것입니다. 즉 webservice 서버에서 직접 가져온).

BTW2 : 매개 변수없는 생성자를 사용하는 경우 해결 방법 2는 실제로 +/- 서비스 클래스의 생성 된 코드가 수행하는 것입니다.