IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  SOA и Web-сервисы  >

Использование Ajax c WSRF::Lite

Управление WSRF::Lite WS-Resources с использованием Ajax

developerWorks
На предыдущую страницуСтраница 4 из 12 На предыдущую страницу

Опции документа

Обсудить


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Использование HTTP для взаимодействия с WSRF::Lite

Используйте curl для извлечения ResourcePropertyDocument

Установите WSRF::Lite (V0.8.2 или старше) и запустите контейнер WSRF::Lite, как описано в руководстве "Создание WS-Resources с использованием WSRF::Lite".

После начала работы контейнера создайте основанный на процессе WS-Resource-счетчик. Обратите внимание на то, что в более поздних версиях WSRF::Lite вся адресная информация содержится в wsa:Address URI EPR ресурса WS-Resource.

Передайте URI из элемента wsa:Address EPR нового WS-Resource-счетчика в curl или wget, как показано ниже.



Листинг 3. Извлечение ResourcePropertyDocument с помощью curl
                    
bash$ curl http://192.168.1.3:50000/
WSRF/Counter/Counter/333811201107250088692

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="Counter.xsl"?>
<wsrp:ResourceProperties xmlns:wsrp=\
"http://docs.oasis-open.org/wsrf/rp-2">
  <mmk:bar xmlns:mmk="http://www.sve.man.ac.uk/Counter">
     <BAR xmlns="http://docs.oasis-open.org/
     wsrf/rp-2"><foo>mmmh</foo></BAR>
  </mmk:bar>
  <mmk:count xmlns:mmk="http://www.sve.man.ac.uk/Counter">0</mmk:count>
  <wsrl:TerminationTime xmlns:wsrl="http://docs.oasis-open.org/wsrf/rl-2">
     2007-02-20T12:38:33Z</wsrl:TerminationTime>
  <wsrl:CurrentTime xmlns:wsrl="http://docs.oasis-open.org/wsrf/rl-2">
    2007-02-20T11:38:42Z</wsrl:CurrentTime>
</wsrp:ResourceProperties>

В листинге 3 показан пример вывода, который вы увидите при использовании curl с wsa:Address URI WS-Resource-счетчика. Обратите внимание на то, что сообщение не содержит SOAP-элементов, а только ResourceProperties (если у вас не установлен Perl-модуль XML::CanonicalizeXML вместе с WSRF::Lite, вы увидите SOAP-элементы и не сможете использовать Ajax). WSRF::Lite удалил SOAP-элементы перед возвратом сообщения. Также обратите внимание на то, что XML содержит ссылку на таблицу стилей (stylesheet); в следующем разделе об XSLT будет показано, как используется эта таблица стилей.

Вы можете также обновить WS-Resource-счетчик, используя curl. Повторите предыдущую команду, но в этот раз перенаправьте вывод из curl в файл. Отредактируйте XML в файле для изменения значения mmk:count и используйте параметр -T программы curl для передачи файла назад в WS-Resource. С параметром -T curl автоматически использует метод HTTP PUT для передачи содержимого файла по указанному URI. Можно также использовать параметр -v для получения более подробного вывода. В листинге 4 показан пример обновления WS-Resource с использованием HTTP PUT и curl. Значение счетчика изменилось на 5.


Листинг 4. Обновление WS-Resource с использованием curl и HTTP PUT
                    
bash$ curl http://192.168.1.3:50000/WSRF/Counter/Counter/333811201107250088692 > \
/tmp/foobar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   625  100   625    0     0   1294      0 --:--:-- --:--:-- --:--:--     0
bash$ vi /tmp/foobar
bash$ curl -T /tmp/foobar \
http://192.168.1.3:50000/WSRF/Counter/Counter/333811201107250088692 
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="Counter.xsl"?>
<wsrp:ResourceProperties xmlns:wsrp="http://docs.oasis-open.org/wsrf/rp-2">
  <mmk:bar xmlns:mmk="http://www.sve.man.ac.uk/Counter">
     <BAR xmlns="http://docs.oasis-open.org/wsrf/rp-2"><foo>mmmh</foo></BAR>
  </mmk:bar><mmk:count xmlns:mmk="http://www.sve.man.ac.uk/Counter">5</mmk:count>
  <wsrl:TerminationTime xmlns:wsrl="http://docs.oasis-open.org/wsrf/rl-2">
    2007-02-20T12:38:33Z</wsrl:TerminationTime>
  <wsrl:CurrentTime xmlns:wsrl="http://docs.oasis-open.org/wsrf/rl-2">
    2007-02-20T12:14:19Z</wsrl:CurrentTime>
</wsrp:ResourceProperties>

Нет необходимости передавать полный ResourcePropertyDocument для обновления WS-Resource. Нужно только передать ResourceProperties, которые вы хотите изменить. Например, в листинге 5 в PUT-сообщение включено только новое значение счетчика. В данном примере используется параметр stdin - с curl для ввода сообщения.


Листинг 5. Использование параметра stdin curl для обновления WS-Resource
                    
bash$ echo '<?xml version="1.0" encoding="ISO-8859-1"?>\
<wsrp:ResourceProperties xmlns:wsrp="http://docs.oasis-open.org/wsrf/rp-2">\
<mmk:count xmlns:mmk="http://www.sve.man.ac.uk/Counter">5</mmk:count>\
</wsrp:ResourceProperties>' | \
curl -T - http://192.168.1.3:50000/WSRF/Counter/Counter/333811201107250088692
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="Counter.xsl"?>
<wsrp:ResourceProperties xmlns:wsrp="http://docs.oasis-open.org/wsrf/rp-2">
  <mmk:bar xmlns:mmk="http://www.sve.man.ac.uk/Counter">
     <BAR xmlns="http://docs.oasis-open.org/wsrf/rp-2"><foo>mmmh</foo></BAR></mmk:bar>
  <mmk:count xmlns:mmk="http://www.sve.man.ac.uk/Counter">5</mmk:count>
  <wsrl:TerminationTime xmlns:wsrl="http://docs.oasis-open.org/wsrf/rl-2">
     2007-02-21T12:39:19Z</wsrl:TerminationTime>
  <wsrl:CurrentTime xmlns:wsrl="http://docs.oasis-open.org/wsrf/rl-2">
     2007-02-21T12:06:53Z</wsrl:CurrentTime>
</wsrp:ResourceProperties>

Примечание: Нет необходимости включать полный ResourcePropertyDocument для обновления WS-Resource - нужны только ResourceProperties, которые вы хотите изменить.

В следующем разделе будет рассмотрено, как обеспечить поддержку для HTTP PUT, используя WSRF-операцию PutResourcePropertyDocument.

HTTP PUT и PutResourcePropertyDocument

В WSRF::Lite HTTP PUT отображается на PutResourcePropertyDocument. Однако WSRF::Lite не предоставляет встроенной операции PutResourcePropertyDocument; WS-Resource-разработчики должны предоставить реализацию. В листинге 6 показана реализация PutResourcePropertyDocument для WS-Resource-счетчика, находящаяся в файле $WSRF_MODULES/modules/WSRF/Counter/Counter.pm.


Листинг 6. Операция PutResourcePropertyDocument из примера WS-Resource-счетчика
                    
#Мы позволяем операции PutResourcePropertyDocument устанавливать только 
#TerminationTime и count
sub PutResourcePropertyDocument {
  my $self = shift @_;
  my $envelope = pop @_;   #извлечь SOAP-конверт

  #проверить, есть ли "count" в SOAP-конверте 
  if (  $envelope->match("//Body//count")  )
  {
    #найден "count", обновить ResourceProperty после проверки его типа (должен быть int),
    #предохраняемся от внедрения JavaScript-кода!
    $WSRF::WSRP::ResourceProperties{count} = int( $envelope->valueof("//Body//count"));
  }

  #проверить наличие TerminationTime      
  if ( $envelope->match("//Body//{$WSRF::Constants::WSRL}TerminationTime") )
  { 
    #найден TerminationTime, теперь попытаться использовать его для установки 
    #ResourceProperty, если TerminationTime в неправильном формате 
    #будет сгенерирована исключительная ситуация
    eval {
           #Использовать операцию WSRF SetTerminationTime с self,  
           #ожидается значение и конверт
           $self->SetTerminationTime(
           $envelope->valueof("//Body//{$WSRF::Constants::WSRL}TerminationTime"),
                              $envelope);
    };
    if ( $@ ) #плохой TerminationTime, перехват исключительной ситуации 
    { 
      print "Attempt to update TerminationTime with bad value\n $@";
    }
  }      

  #нужно возвратить новую версию ResourcePropertyDocument,
  #вызвать WSRF-операцию GetResourcePropertyDocument с self.
  return $self->GetResourcePropertyDocument($envelope);
}

Реализация PutResourcePropertyDocument для WS-Resource-счетчика позволяет изменять только TerminationTime и ResourceProperties count. Любые другие свойства ResourceProperties в сообщении игнорируются. Обратите внимание также на то, что операция ожидает SOAP-конверт. Контейнер WSRF::Lite преобразует сообщение HTTP PUT в SOAP-сообщение WSRF PutResourcePropertyDocument перед передачей его в WS-Resource и удаляет SOAP-элементы из ответа перед его возвратом клиенту.

Не забывайте проверять все вводимые значения на зловредность; например, злоумышленник может попытаться установить одно из свойств ResourceProperties в JavaScript-код, который он хотел бы выполнить в ничего не подозревающем Web-браузере пользователя. В случае с новым значением счетчика выполняется приведение его типа в int перед сохранением. TerminationTime проверяется в операции SetTerminationTime, для того чтобы убедиться в корректности форматирования строки времени. Если с форматом строки TerminationTime что-то не так, операция SetTerminationTime генерирует исключительную ситуацию - вот почему она вызывается в блоке eval.



В начало



На предыдущую страницуСтраница 4 из 12 На предыдущую страницу

    IBM в России Конфиденциальность Контакты