Главная » Java, Web, XML » Пакет JWSDL и его реализация WSDL4J

0

Пакет JWSDL состоит из интерфейсов и классов, собранных в пакет javax.wsdl и несколько его подпакетов. Они реализованы в пакете com. ibm. wsdl и его подпакетах, входящих в пакет IBM WSDL4J.

В пакете javax.wsdi содержатся интерфейсы, описывающие различные XML-элементы WSDL-ДОКумента: Definition, Types, Message, Port Type, Binding, Service, И вложенные В ЕИХ Элементы: Operation, Part, Input,

Output, Port, BindingOperation, Bindinginput, BindingOutput, Binding- Fault. Методы getXxx () этих интерфейсов позволяют читать соответствующие элементы, а методы setxxx () — записывать их.

В интерфейсе Definition, кроме того, есть методы createXxxO, создающие объекты этих интерфейсов, например,

Message msg = def.createMessage();

Методы                     добавляют созданные объекты к документу WSDL, на

пример:

def.addMessage(msg);

Сам же объект типа Definition создается фабричным методом newDefini- tion() класса WSDLFactory ИЗ пакета javax.wsdl. factory: Definition def = fact.newDefinition() ;

Экземпляр класса WSDLFactory, в свою очередь, создается статическим методом  о , следующим образом:

WSDLFactory fact = WSDLFactory.newlnstance();

Этот метод отыскивает класс-фабрику, сначала просматривая темное СВОЙСТВО javax.wsdl. factory. WSDLFactory, ПОТОМ файл

потом загружает фабрику по умолчанию. Можно загрузить другую фабрику классов, воспользовавшись вторым методом:

public static WSDLFactory newlnstance (String factory);

Кроме объекта типа Definition, класс-фабрика WSDLFactory создает объекты типа читающие описание WSDL, и объекты типа wsDLWriter, записывающие заранее подготовленный документ WSDL. Интерфейсы WSDLReader И WSDLWriter содержатся В пакете Создание объектов выполняется методами newWSDLReader () и newwsDLWriter () следующим образом: WSDLReader reader = fact.newWSDLReader(); WSDLWtiter writer = fact.newWSDLWriter () ;

После создания объекта reader можно определить его свойства методом public void setFeature(string name, boolean value); Спецификация WSDL определяет два свойства объекта типа WSDLReader:

?         если значение свойства "javax.wsdl. verbose" равно true, то объект выводит свои сообщения в стандартный вывод    out;

?         если свойство "javax.wsdl. importDocuments" равно true, то все импортированные документы будут обработаны, если false — то они игнорируются.

По умолчанию оба свойства равны true.

После того как объект reader получен, с помощью его методов readwsDLO можно получить объект типа Definition, заполненный содержимым прочитанного документа WSDL, например: Definition def = rdr.readWSDL("sample.wsdl") ;

В листинге 4.7 приведен пример программы, читающей и разбирающей средствами пакета JWSDL файл sample.wsdl, содержащий документ WSDL, и выводящий встреченные в нем сообщения и имена в стандартный вывод.

Листинг 4.7. Чтение документа WSDL

import j avax.wsdl.*; import javax.wsdl.factory.*;

import j

public class ReadWSDL{

public static void main(String[] args){ try{

WSDLFactory fact = WSDLFactory.newInstance();

WSDLReader reader = fact.newWSDLReader(); reader.setFeature("javax.wsdl.verbose", false); reader.setFeature("javax.wsdl.importDocuments", true);

Definition def = reader.readWSDL(null, "sample.wsdl");

Service service =

new QName("http://some.com/wsdl",

"SomeService"));

Port port =

Binding binding = port.getBinding(); PortType portType = binding.getPortType();

Map messages =

Iterator msglt = messages.values О .iterator();

while (msglt.hasNext()){

Message msg = (Message)msglt.next() ;

if ( !msg.isUndefined())

System.out.println(msg.getQName());

}

List operations = portType.getOperations();

Iterator        =

while

Operation operation =

if (!operation.isUndefined())

System.out.println(operation.getName());

}

}catch(WSDLException e) {

System.err.println(e);

}

}

}

Листинг 4.8 показывает процесс создания описания WSDL средствами пакета JWSDL.

‘. Шспинг 4.8. Создание gcKyNernaWSDL

import j avax.wsdl.*; import j avax.wsdl.factory.*;

import j avax.wsdl.xml.*;

public class WriteWSDLf

{

public static void main(String[j args)

try{

WSDLFactory fact = WSDLFactory.newlnstance(); WSDLWriter writer = fact.newWSDLWriter(); writer.writeWSDL(def, System.out);

Definition def = fact.newDefinition() ;

Part parti = def.createPart(); Part part2 = def.createPart();

Message msgl = def.createMessage(); Message msg2 = def.createMessage();

Input input = def.createlnput(); Output output = def.createOutput();

Operation operation = def.createOperation(); PortType portType = def.createPortTypeO;

String tns = "htt^://sone.con/wБdl";

def. setQName (new QName (tns, "SomeServ^ice"));

def.setTargetNamespace(tns);

def.addNamespace("tns", tns);

String xsd = "http://www.w3.oщ/2001/XML?ch.ena,,; def .addNamespace ("xsd" , xsd) ;

parti.setName("symbol");

parti. setTypeName (new QName (xsd, "string"));

msgl.setQName(new QName(tns, "getQuotelnput")); msgl.addPart(parti) ; msgl.setUndefined(false) ;

def.addMessage(msgl) ;

part2.setName("quote") ;

part2 . setTypeName (new QName (xsd, " float" ) ) ;

msg2. setQName (new QName (tns, "get^oteOutput"));

msg2.addPart(part2) ; msg2.setUndefined(false);

def.addMessage(msg2) ;

input.setMessage(msgl) ; output.setMessage(msg2) ;

operation.setName("getQuote") ; operation.setlnput(input); operation.setOutput(output); operation.setUndefined(false);

portType. setQName (new QName (tns, "Ge^tQuc^te^")); portType.addOperation(operation) ; portType.setUndefined(false) ;

def.addPortType(portType);

}catch(WSDLException e) {

System.err.println(e);

}

}

}

Литература:

Хабибуллин И. Ш. Разработка Web-служб средствами Java. — СПб.: БХВ-Петербург, 2003. — 400 с: ил.

По теме:

  • Комментарии