Всем привет У меня проблемма с клиентом XFire при вызове сервиса. XFire почему-то генерирует атрибуты заголовка с маленькой буквы, хотя сервис требует с большой (и в wsdl-файле тоже большие буквы стоят). | Код | POST /Cig.WebService.CigSuite/service.asmx HTTP/1.1 SOAPAction: "http://ws.creditinfo.com/GetLocations" Content-Type: text/xml; charset=UTF-8 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; XFire Client +http://xfire.codehaus.org) Host: www-test2.1cb.kz:7777 Expect: 100-continue Content-Length: 861
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap:Header> <CigWsHeader xmlns="http://ws.creditinfo.com/"> <culture xmlns="http://ws.creditinfo.com">ru_RU</culture> <!-- а должно быть: Culture xmlns=... --> <otherAttributes xmlns="http://ws.creditinfo.com" /> <password xmlns="http://ws.creditinfo.com">aaaa</password> <!-- а должно быть: Password xmlns=... --> <securityToken xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance" ns1:nil="true" xmlns="http://ws.creditinfo.com" /> <!-- и т.д. --> <userId xmlns="http://ws.creditinfo.com">1</userId> <userName xmlns="http://ws.creditinfo.com">aaaa</userName> <version xmlns="http://ws.creditinfo.com">1_0</version> </CigWsHeader> </soap:Header> <soap:Body xmlns:ns1="http://ws.creditinfo.com/"> <ns1:GetLocations> <ns1:parentId>0</ns1:parentId> </ns1:GetLocations> </soap:Body></soap:Envelope>
|
Из-за этого генерируется ошибка: org.codehaus.xfire.fault.XFireFault: Version missing from security header. Т.е. сервер не видит аттрибут Version потому что он его ждёт с большой буквы а приходит с маленькой Сервер работает на платформе .NET wsdl-file: http://www-test2.1cb.kz/Cig.WebService.Cig...rvice.asmx?wsdlна следующем посте я напишу точную последовательность действий Добавлено через 6 минут и 33 секундывот сдесь я скачал xfire: http://xfire.codehaus.org/Downloadот тубава взял jar-ы для такого скрипта: | Код | LIB=../lib
CP=$LIB/xfire-all-1.2.6.jar CP=$CP:$LIB/ant.jar CP=$CP:$LIB/jaxb-api-2.0.jar CP=$CP:$LIB/stax-api-1.0.1.jar CP=$CP:$LIB/jdom-1.0.jar CP=$CP:$LIB/jaxb-impl-2.0.1.jar CP=$CP:$LIB/jaxb-xjc-2.0.1.jar CP=$CP:$LIB/wstx-asl-3.2.0.jar CP=$CP:$LIB/commons-logging-1.0.4.jar CP=$CP:$LIB/activation-1.1.jar CP=$CP:$LIB/wsdl4j-1.6.1.jar CP=$CP:$LIB/XmlSchema-1.1.jar
java -cp $CP org.codehaus.xfire.gen.WsGen \ -wsdl http://www-test2.1cb.kz/Cig.WebService.CigSuite/service.asmx?wsdl \ -o ../webservice \ -p kz.greetgo.nbp.export1cb.webservice \ -binding jaxb \ -overwrite true
|
который в папке ../webservice сгенерировал набор классов потом я воспользовался этими классами следующим образом: | Код | public static void main(String[] args) { int runBlock = 2; ServiceClient sc = new ServiceClient(); String host = "www-test2.1cb.kz"; //String host = "localhost:7777"; // - прогоняем через axis ServiceSoap s = sc.getServiceSoap("http://" + host + "/Cig.WebService.CigSuite/service.asmx"); if (runBlock == 2) { CigWsHeader cigWsHeaderValue = new CigWsHeader(); cigWsHeaderValue.setUserName("любой"); cigWsHeaderValue.setPassword("любой"); cigWsHeaderValue.setCulture("ru_RU"); cigWsHeaderValue.setUserId(1); cigWsHeaderValue.setVersion("1_0"); Holder<CigWsHeader> cigWsHeader = new Holder<CigWsHeader>(cigWsHeaderValue); GetLocations getLocations = new GetLocations(); getLocations.setParentId(0); GetLocationsResponse locations = s.getLocations(getLocations, cigWsHeader); GetLocationsResult locationsResult = locations.getGetLocationsResult(); List<Object> list = locationsResult.getContent(); for (Object o : list) { System.out.println("o: " + o.getClass()); } } }
|
(../webservice - включил в сурспаф, и все вышеприведенные jar-ы) Добавлено через 11 минут и 41 секундувот такой скрипт на перле работает нормально: | Код | #!/usr/bin/perl -w
use strict; use HTTP::Request; use LWP::UserAgent;
my $content=<<CONTENT; <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> <CigWsHeader xmlns="http://ws.creditinfo.com/"> <UserName>aaa</UserName> <Password>aaa</Password> <Version>1_0</Version> <Culture></Culture> <SecurityToken>string</SecurityToken> <UserId>1</UserId> </CigWsHeader> </soap:Header> <soap:Body> <GetLocations xmlns="http://ws.creditinfo.com/"> <parentId>246</parentId> </GetLocations> </soap:Body> </soap:Envelope> CONTENT
my $r = HTTP::Request->new( POST => 'http://www-test2.1cb.kz/Cig.WebService.CigSuite/service.asmx' );
$r->header( "Host"=> "localhost" ); $r->header( "Content-Type"=> "text/xml; charset=utf-8" ); $r->header( "Content-Length"=> length $content ); $r->header( "SOAPAction"=> '"http://ws.creditinfo.com/GetLocations"' ); $r->content( $content );
my $ua = LWP::UserAgent->new(); my $res = $ua->request( $r );
use Data::Dumper;
print Dumper( $res );
|
Добавлено через 14 минут и 25 секундПочему xfire генерирует неправильные имена атрибутов заголовков (путает регистры)? Заранее благодарю!
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
|