2012-07-10 3 views
0

Embedded Jetty 응용 프로그램에 JAX-WS 웹 서비스를 추가하려고합니다. 웹 서비스 클라이언트는 .NET 응용 프로그램입니다.Spring 및 Embedded Jetty 8을 사용하여 JAX-WS 서비스 게시

내 프로젝트가 Netbeans 7.1.1에서 Maven 애플리케이션으로 생성되었습니다. 그것은 Spring 3.0을 사용한다. pom.xml 파일에

  1. 추가 된 잭스 - WS-봄 :

    나는 내 응용 프로그램에 JAX-WS를 추가하려면 다음 단계를했다.

    <dependency> 
        <groupId>org.jvnet.jax-ws-commons.spring</groupId> 
        <artifactId>jaxws-spring</artifactId> 
        <version>1.8</version> 
        <exclusions> 
         <exclusion> 
          <groupId>javax.servlet</groupId> 
          <artifactId>servlet-api</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.springframework</groupId> 
          <artifactId>spring</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.springframework</groupId> 
          <artifactId>spring-core</artifactId> 
         </exclusion> 
         <exclusion> 
          <groupId>org.springframework</groupId> 
          <artifactId>spring-context</artifactId> 
         </exclusion> 
        </exclusions> 
    </dependency> 
    
  2. 내 스프링 웹 서비스 컨텍스트에서 WSSpringServlet을 구성하십시오.

    webservicesContext.addServlet(new ServletHolder(new WSSpringServlet()), "/service/*"); 
    
  3. 내 서비스의 구현 클래스가 생성되었습니다.

  4. 내 서비스를 Spring applicationContext.xml 파일에서 구성하십시오.

    <bean id="generateUEIDService" class="com.mycompany.GenerateUEIDService"/> 
    
    <wss:binding url="/service/GenerateUEID.svc"> 
    <wss:service> 
        <ws:service bean="#generateUEIDService" /> 
    </wss:service> 
    </wss:binding> 
    

나는 위의 3 단계에 대한 넷빈즈의 모든 웹 서비스 생성 마법사를 사용하지 않았다. 대신 일반 Java 클래스로 GenerateUEIDService를 만들었지 만 주석을 추가했습니다. 비록 Netbeans가 어떻게 든 그것을 감지하지는 않았지만, 웹 서비스는 "GenerateUEIDServiceService"라는 프로젝트 뷰에 "Web Services"노드를 생성했기 때문에 웹 서비스였습니다. GenerateUEIDServiceService를 확장하면 "generateUniqueIds : String"이 표시됩니다.

괜찮을 것 같습니다. 나는 응용 프로그램을 실행할 때 내가 얻을 :

com.sun.xml.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.mycompany.jaxws.GenerateUniqueIds is not found. Have you run APT to generate them?

음 아니, 난 아무것도를 생성하기 위해 APT 실행하지 않았습니다. 내 구성을 감안할 때 어떻게해야합니까? pom.xml에 플러그인을 추가해야합니까? 아니면 Netbeans가 마술처럼 나를 위해 래퍼를 생성 했습니까?

제 웹 서비스 클라이언트는 .NET입니다. 그래서 document/literal wrapped의 기본 SOAPBinding을 사용해야한다고 가정합니다.

답변

1

. JAX-WS 런타임에 의해 런타임에 동적으로 생성된다는 사실이 밝혀졌습니다.

[exec:exec] 
Jul 12, 2012 8:30:05 AM com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass 
INFO: Dynamically creating request wrapper Class com.mycompany.mavenjaxwsjetty.jaxws.Greet 
Jul 12, 2012 8:30:05 AM com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass 
INFO: Dynamically creating response wrapper bean Class com.mycompany.mavenjaxwsjetty.jaxws.GreetResponse 

그래서 (위의 원래 게시물에서) 원래 응용 프로그램으로 돌아갑니다. 관련없는 이유로 jaxws-spring 항목을 제거했습니다. 나는 내가 기억할 수없는 몇 가지 다른 변화를 만들었을지도 모른다. 그리고 지금은 응용 프로그램을 실행할 때 로그에서 래퍼 클래스가 생성되고 있음을 알 수 있습니다.

그래서 내 질문에 대한 답변은 마법서로 나를 위해 래퍼 클래스를 만드는 것이 아니라 jax-ws 런타임 않습니다.

아직도 어떤 상황에서 래퍼 클래스가 자동으로 생성되지 않을지 궁금합니다.또는 wsgen 또는 maven-jaxb2-plugin을 사용하여 내 자신을 생성하려고 할 때. 늘 그렇듯이, "고양이를 껍질을 벗기는"방법에는 여러 가지가 있으며 각각은 장단점이 있습니다.

0

Maven 플러그인을 사용하여 jaxb 클래스를 생성 할 수 있습니다. 그것은 다음과 같이한다 : 나는 서비스에 대한 래퍼 클래스가 자동으로 생성 될 수 있는지 확인하는 간단한 넷빈즈 메이븐 자바 응용 프로그램을 만들기로 결정

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.8.1</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <source>1.6</source> 
     <target>1.6</target> 
     <!-- 
     <generatePackage>if you wan to force the package</generatePackage> 
     --> 
     <generateDirectory>target/jaxb/generate/</generateDirectory> 
     <schemaDirectory>src/main/webapp/WEB-INF/</schemaDirectory> 
     <includeSchemas> 
      <includeSchema>yourXSDfile.xsd</includeSchema> 
     </includeSchemas> 
    </configuration> 
</plugin> 
+0

답변 해 주셔서 감사합니다. 나는 XSD를 만들지 않았다. 내 WSDL과 XSD가 나를 위해 동적으로 생성되기를 바랍니다. jaxws 런타임이 지금 저를 위해 그것을하고있는 것 같습니다. – Jerome

+0

알겠습니다. 너의 질문을 이해하지 못 했어. – jddsantaella

관련 문제