Adobe Flex Builder WSDL クラスの自動生成機能が奇妙なファイルを生成します。
例えば:
http://ws.cdyne.com/WeatherWS/Weather.asmx?wsdl
インポート後、次のファイルが生成されます。
ArrayOfForecast.as
ArrayOfWeatherDescription.as
ArrayOfWeatherDescription0.as
BaseWeather.as
BaseWeatherSchema.as
Forecast.as
ForecastReturn.as
ForecastReturn0.as
GetCityForecastByZIPResultEvent.as
GetCityForecastByZIP_request.as
GetCityWeatherByZIPResultEvent.as
GetCityWeatherByZIP_request.as
GetWeatherInformationResultEvent.as
GetWeatherInformation_request.as
IWeather.as
POP.as
Temp.as
Weather.as
WeatherDescription.as
WeatherReturn.as
WeatherReturn0.as
最後のファイルにあるこれらの ZERO は何のためのものですか?
これは、3 つのオペレーションを持つサービスの例でした。私の実際の wsdl には、さらに多くのメソッドと型があります。
更新しました
同時に、Java はよりクリーンなクラスのセットを生成します。
Forecast.java
ForecastReturn.java
POP.java
Temp.java
WeatherDescription.java
Weather.java
WeatherLocator.java
WeatherReturn.java
WeatherSoap12Stub.java
WeatherSoap.java
WeatherSoapProxy.java
WeatherSoapStub.java
このような小さなサービスでは目立ちませんが、より多くの操作と型を持つ大規模なサービスでは、何百ものクラスが生成されます。Adobe Flex チームが適切な方法で wsdl クラスの自動生成を行っていることに疑問を持っています。
更新-2
WeatherReturn.as:
public class WeatherReturn
{
/**
* Constructor, initializes the type class
*/
public function WeatherReturn() {}
public var Success:Boolean;
public var ResponseText:String;
public var State:String;
public var City:String;
public var WeatherStationCity:String;
public var WeatherID:Number;
public var Description:String;
public var Temperature:String;
public var RelativeHumidity:String;
public var Wind:String;
public var Pressure:String;
public var Visibility:String;
public var WindChill:String;
public var Remarks:String;
}
WeatherReturn0.as:
public class WeatherReturn0
{
/**
* Constructor, initializes the type class
*/
public function WeatherReturn0() {}
public var WeatherReturn:com.cdyne.WeatherReturn;
}
WeatherReturn.java:
public class WeatherReturn implements java.io.Serializable {
private boolean success;
private java.lang.String responseText;
private java.lang.String state;
private java.lang.String city;
private java.lang.String weatherStationCity;
private short weatherID;
private java.lang.String description;
private java.lang.String temperature;
private java.lang.String relativeHumidity;
private java.lang.String wind;
private java.lang.String pressure;
private java.lang.String visibility;
private java.lang.String windChill;
private java.lang.String remarks;
// Skipped constructors and getter/setter
private java.lang.Object __equalsCalc = null;
public synchronized boolean equals(java.lang.Object obj)
private boolean __hashCodeCalc = false;
public synchronized int hashCode()
// Type metadata
private static org.apache.axis.description.TypeDesc typeDesc = new org.apache.axis.description.TypeDesc(WeatherReturn.class, true);
static {
typeDesc.setXmlType(new javax.xml.namespace.QName("http://ws.cdyne.com/WeatherWS/", "WeatherReturn"));
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("success");
elemField.setXmlName(new javax.xml.namespace.QName("http://ws.cdyne.com/WeatherWS/", "Success"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "boolean"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("responseText");
// More typedesc here ...
}
public static org.apache.axis.description.TypeDesc getTypeDesc() {
public static org.apache.axis.encoding.Serializer getSerializer(
public static org.apache.axis.encoding.Deserializer getDeserializer(
}
Java の例のメソッド シグネチャのみを残し、getter/setter をスキップしました。