2012-03-21 12 views
11

Tôi đang sử dụng tập lệnh maven để tạo mã Java mà tôi cần để giao tiếp với dịch vụ WCF. Tôi đã nhận được thông tin liên lạc làm việc và sẵn sàng để tích hợp kịch bản maven của tôi, và mã nó tạo ra, với phần còn lại của mã java từ dự án.Chỉ định tên gói khi sử dụng Maven để tạo Java từ WSDL

Tuy nhiên, tôi không thể tạo maven để tạo mã với tên gói chính xác mà tôi muốn. Từ những gì tôi đã đọc trực tuyến, tôi nên sử dụng thẻ, và tôi đã nhìn thấy hai nơi có thể xảy ra. Tôi đã bao gồm các phân đoạn của kịch bản tôi nghĩ rằng những cần phải đi vào, và cả hai người trong số họ ở đó. Tuy nhiên, các thẻ này ảnh hưởng đến không có gì và mã tạo ra giống như không có chúng

 <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-codegen-plugin</artifactId> 
      <version>${cxf.version}</version> 
      <configuration> 
         <packageName>com.name.server.cxf</packageName>      
        <sourceRoot>src/com/server/cxf</sourceRoot> 
         <wsdlOptions> 
          <wsdlOption> 
           <wsdl>src/com/server/cxf/code-generation/service.xml</wsdl> 
           <bindingFiles> 
            <bindingFile>src/com/server/cxf/code-generation/javabindings.xml</bindingFile> 
           </bindingFiles> 
           <extraargs> 
            <extraarg>-validate</extraarg> 
            <extraarg>-client</extraarg> 
            <extraarg>-verbose</extraarg> 
            <extraarg>-xjc-verbose</extraarg> 
           </extraargs> 
          </wsdlOption> 
         </wsdlOptions> 
         <verbose /> 
        </configuration> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
        <configuration> 
         <packageName>com.name.server.cxf</packageName>  
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Có lẽ tôi đang sử dụng sai thẻ, hoặc có thể nó sai vị trí?

+1

Không bao giờ tạo ra nguồn vào src/... tốt hơn mục tiêu sử dụng/... – khmarbaise

Trả lời

18

Thêm <extraarg>-p</extraarg><extraarg>com.name.server.cxf</extraarg> vào phần <extraargs> bên trong thẻ <wsdlOption>. Sau đây (phiên bản hơi khác nhau) làm việc cho tôi.

 <plugin> 
      <groupId>org.apache.cxf</groupId> 
      <artifactId>cxf-codegen-plugin</artifactId> 
      <version>${cxf.version}</version> 
      <executions> 
       <execution> 
        <id>generate-sources</id> 
        <phase>generate-sources</phase> 
        <configuration> 
         <wsdlOptions> 
          <wsdlOption> 
           <wsdl>src/com/server/cxf/code-generation/service.xml</wsdl> 
           <bindingFiles> 
            <bindingFile>src/com/server/cxf/code-generation/javabindings.xml</bindingFile> 
           </bindingFiles> 
           <extraargs> 
            <extraarg>-validate</extraarg> 
            <extraarg>-client</extraarg> 
            <extraarg>-verbose</extraarg> 
            <extraarg>-xjc-verbose</extraarg> 
            <extraarg>-p</extraarg> 
            <extraarg>com.name.server.cxf</extraarg> 
           </extraargs> 
          </wsdlOption> 
         </wsdlOptions> 
        </configuration> 
        <goals> 
         <goal>wsdl2java</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 

Ngoài ra, tạo ra một tập tin service-options trong src/com/server/cxf/code-generation/ với nội dung -p com.name.server.cxf

+0

Thật không may là không ai trong số đó dường như có bất kỳ ảnh hưởng nào cả ... Để chắc chắn, tệp tùy chọn dịch vụ không cần phần mở rộng? – crdzoba

+0

Có, không có tiện ích mở rộng. Tôi tin rằng định dạng là -options nơi bạn có serviceName.wsdl – aliasmrchips

+0

Lần đầu tiên tôi đã thử tôi đã có -p và com.name.server.cxf được đính kèm trong các thẻ trên cùng một dòng ... Đó có thể là vấn đề . Tôi gặp lỗi khi tôi làm lại, nhưng sau đó tôi đã thêm -autoNameResolution bên dưới hai thẻ bạn đề xuất và mọi thứ có vẻ hoạt động ngay bây giờ! Cám ơn rất nhiều! – crdzoba

1

này hoạt động rất tốt đối với tôi:

<wsdlOption> 
           <wsdl>src/main/resources/wsdl/my_wsdl.wsdl</wsdl> 
           <extraargs> 
            <extraarg>-p</extraarg> 
            <extraarg>http://services.demo.es/=com.my.package.demo1</extraarg> 
            <extraarg>-p</extraarg> 
            <extraarg>http://tempuri.org/=com.my.package.demo2</extraarg> 
            <extraarg>-exsh</extraarg> 
            <extraarg>true</extraarg> 
            <extraarg>-client</extraarg> 
            <extraarg>-wsdlLocation</extraarg> 
            <extraarg></extraarg> 
           </extraargs> 
          </wsdlOption> 
0

Các giải pháp trên với

<extraarg>-p</extraarg> 
<extraarg>com.name.server.cxf</extraarg> 

Đang thay đổi tên gói của nguồn được tạo trong một gói duy nhất, vì lớp ObjectFactory đang ghi đè. Tôi cần cấu trúc gói như dựa trên wsld. Cùng với gói bổ sung.

lớp dụ java được tạo ra như com.service.name.mypackage.a, com.service.name.mypackage.b, com.service.name.mypackage.c