Crear un cliente java de Web Services para Exchange 2007
Para crear el cliente he usado el IDE eclipse-Red Hat Developer Studio, pero el procedimiento será similar para cualquier IDE.
Supondremos que la dirección del servidor es "my.exchange.com".
El primer paso es bajarse del servidor exchange estos 3 archivos y guardarlos en local:
* https://my.exchange.com/ews/Services.wsdl
* https://my.exchange.com/ews/messages.xsd
* https://my.exchange.com/ews/types.xsd
Después hay que modificar el archivo "Services.wsdl" para añadir el servicio y su url.
Debes añadir al final del archivo (antes de cerrar la etiqueta <wsdl:definitions>) las siguientes lineas:
-
<wsdl :service name="ExchangeServices">
-
</wsdl><wsdl :port name="ExchangeServicePort" binding="tns:ExchangeServiceBinding">
-
<soap :address location="https://my.exchange.com/EWS/Exchange.asmx"/>
-
</wsdl>
Ahora tendrás que modificar los archivos "types.xsd" y "messages.xsd" para que maneje correctamente los arrays, mapeandolos a colecciones.
Para cada tipo llamado "ArrayOf..." o "NonEmpyArrayOf..." tendrás que añadirle el atributo maxOccurs="unbounded"
Ejemplo:
-
<xs :complexType name="ArrayOfFoldersType">
-
</xs><xs :choice minOccurs="0" maxOccurs="unbounded">
-
<xs :element name="Folder" type="t:FolderType" maxOccurs="unbounded"/>
-
<xs :element name="CalendarFolder" type="t:CalendarFolderType" maxOccurs="unbounded"/>
-
<xs :element name="ContactsFolder" type="t:ContactsFolderType" maxOccurs="unbounded"/>
-
<xs :element name="SearchFolder" type="t:SearchFolderType" maxOccurs="unbounded"/>
-
<xs :element name="TasksFolder" type="t:TasksFolderType" maxOccurs="unbounded"/>
-
</xs>
Si ya has generado el cliente y sin haber cambiado esto, las clases "ArrayOf..." y "NonEmpyArrayOf..." y generadas serán incapaces de manejar arrays.
Pero aún tiene solución. Deber añadir a cada clase un campo de tipo List (cualquier Collection vale), y en cada método setXXX añadir el objeto pasado como parámetro al array.
Por ejemplo, en la clase ArrayOfRealItemsType:
-
// declaras la lista:
-
private List<ItemType> items = new ArrayList<ItemType>();
-
-
//sobreescribes los setters para añadir los parametros a la lista:
-
public void setPostItem(com.microsoft.schemas.exchange.services._2006.types.PostItemType postItem) {
-
this.items.add(postItem);
-
this.postItem = postItem;
-
}
-
-
public void setMessage(com.microsoft.schemas.exchange.services._2006.types.MessageType message) {
-
this.items.add(message);
-
this.message = message;
-
}
-
-
// etc..
Una vez que has generado el cliente verás que te da algunos fallos de compilación.
Esto es porque por algún motivo los constructores no se generan bien.
Tras arreglar los fallos podemos continuar.
La clase principal para realizar las llamadas al Web Service es ExchangeServiceBindingStub.
Creamos el objeto y le ponemos los parametros de usuario, password y servidor.
-
ExchangeServiceBindingStub esb = (ExchangeServiceBindingStub) new ExchangeServicesLocator().getExchangeServicePort(new URL(locator.getExchangeServicePortAddress()));
-
esb.setUsername("usuario");
-
esb.setPassword("password");
-
esb._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, "https://my.exchange.com/EWS/Exchange.asmx");
Antes de continuar debes asegurarte que el servidor tiene activada la autentificación básica, si no te saldrá un error HTTP 402.2 "acceso denegado debido a la configuración del servidor"
Ahora solo queda invocar al método del Web Service que quieras y rellenar los parámetros requeridos.





.:: Seam City ::. » Añadir logging a un cliente SOAP de web services Said,
June 9, 2008 @ 1:51 am
[...] estar asociado Tomaremos como ejemplo un cliente WebService para Microsoft Exchange 2007, creado en un post anterior En primer lugar buscamos la clase que extiende de org.apache.axis.client.Stub, en nuestro caso [...]