2017-07-31 12 views
0

wsimportをcmdから実行して、bindings.xmlファイルのdataBindingsを実行しています。基本的には、 "datetime"スキーマタイプのデフォルトバインディングを "XMLGregorianCalendar"の代わりに "java.util.Date"を生成するようにオーバーライドしようとしています。追加のJAXBバインディングを使用するwsimportでのエラー

ここに私が使用するコマンドがあります。

wsimport -keep -verbose -extension -b bindings.xml -wsdllocation http://localhost/wsdl/API http://localhost:8080/cc/API?WSDL -d C:/Users/ab/Desktop/test 

My Bindings.xmlはこのようになります。

package adapter; 

import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 
import javax.xml.bind.DatatypeConverter; 

public class DateAdapter 
{ 
    public static Date unmarshal(String paramString) 
    { 
     return DatatypeConverter.parseDate(paramString).getTime(); 
    } 

    public static String marshal(Date paramDate) 
    { 
     Calendar localCalendar = GregorianCalendar.getInstance(); 
     localCalendar.setTime(paramDate); 
     return DatatypeConverter.printDateTime(localCalendar); 
    } 
} 

実行wsimportのはAdapter1.classとともにWebサービスファイルを生成します。

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.1" > 
    <globalBindings> 
     <javaType name="java.util.Date" xmlType="xs:dateTime" 
     parseMethod="adapter.DateAdapter.marshal" 
     printMethod="adapter.DateAdapter.unmarshal" /> 
    </globalBindings> 
</bindings> 

は、ここに私のDateAdapterクラスです。ただし、応答には次のエラーが含まれています。

C:\Users\ab\Desktop\test\org\w3\_2001\xmlschema\Adapter1.java:13: package a 
dapter does not exist 
     return (adapter.DateAdapter.marshal(value)); 

さて、私のDateAdapter.classは私からwsimportのを実行している同じ場所にフォルダ「アダプタ」に位置しています。

なぜ私はDateAdapterを読むことができないのですか?私はまた、フォルダではなくルートにファイルを保存しようとしましたが、同様の例外がスローされます。

答えて

1

問題の修正方法に関する最新情報。

私は、日付変換作業を行う2つの方法を見つけました。

両方の場合に使用されるwsimportコマンドが質問に記載されています。また、どちらの場合もjdk1.6.0_45を使用しました。

1.この場合、カスタムDateAdapter.class

を使用していない、私は直接日時スキーマ・タイプにjavax.xml.bind.DatatypeConverterを使用しました。ここにバインディングがあります。私はpackage文なしDateAdapter.javaを使用することAdapter1.classにDateAdapterのインポートを置くためにJAXBができない作ることを考え出しカスタムDateAdapter.class

を使用して

<jaxb:globalBindings> 
    <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" 
    printMethod="javax.xml.bind.DatatypeConverter.printDateTime" /> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

2生成されます。 したがって、私はDateAdapter.javaをパッケージ(com.test.date)の中に置き、以下のような完全なパスを使ってバインディング内でそれを参照しました。

<jaxb:globalBindings> 
    <jaxb:javaType name="java.util.Date" xmlType="xs:dateTime" parseMethod="com.test.date.DateAdapter.unmarshal" 
     printMethod="com.test.date.DateAdapter.marshal"> </jaxb:javaType> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

DateAdapter.javaは次のようになります。

package com.test.date; 

import java.util.Calendar; 
import java.util.Date; 
import java.util.GregorianCalendar; 
import javax.xml.bind.DatatypeConverter; 

public class DateAdapter { 
    private DateAdapter() { 
    } 

    public static String marshal(Date date) { 
     System.out.println("Inside marshal"); 
     Calendar cal = GregorianCalendar.getInstance(); 
     cal.setTime(date); 
     return DatatypeConverter.printDateTime(cal); 
    } 

    public static Date unmarshal(String xmlDate) { 
     System.out.println("Inside unmarshal"); 
     return DatatypeConverter.parseDate(xmlDate).getTime(); 
    } 

} 

さて、これはコンパイルエラーをスローしませんが、それは正しく(正しいDateApapterのインポートと)Adapter1.javaを生成します。

関連する問題