6

'u kullanarak gelen SOAP iletisini arabelleğe alırken hata oluştu: "Güvenli wcf web hizmetini Java'da" kullanmak için Metro 2 istemcisini kullanıyorum. Ama Metro istemci herhangi bir yanıt verir ve bir hata olarak çıktı üretmek çok uzun bir süre sonra modunu asmak kalmıyor: hayır ben bu sorunu çözmek için çalışıyorumMetro istemcisi

SEVERE: WSSMSG0001: Error occurred while buffering incoming SOAP message. 
com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x1a 
at [row,col {unknown-source}]: [1,6396222] 
    at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:606) 
    at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:479) 
    at com.ctc.wstx.sr.StreamScanner.reportIllegalChar(StreamScanner.java:2442) 
    at com.ctc.wstx.sr.StreamScanner.validateChar(StreamScanner.java:2389) 
    at com.ctc.wstx.sr.StreamScanner.resolveCharEnt(StreamScanner.java:2355) 
    at com.ctc.wstx.sr.StreamScanner.fullyResolveEntity(StreamScanner.java:1501) 
    at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2726) 
    at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1065) 
    at com.sun.xml.ws.util.xml.XMLStreamReaderToXMLStreamWriter.bridge(XMLStreamReaderToXMLStreamWriter.java:142) 
    at com.sun.xml.ws.message.stream.StreamMessage.writePayloadTo(StreamMessage.java:376) 
    at com.sun.xml.ws.message.stream.StreamMessage.writeEnvelope(StreamMessage.java:412) 
    at com.sun.xml.ws.message.stream.StreamMessage.writeTo(StreamMessage.java:390) 
    at com.sun.xml.ws.security.message.stream.LazyStreamBasedMessage.readMessage(LazyStreamBasedMessage.java:476) 
    at com.sun.xml.wss.jaxws.impl.SecurityTubeBase.verifyInboundMessage(SecurityTubeBase.java:444) 
    at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processClientResponsePacket(SecurityClientTube.java:434) 
    at com.sun.xml.wss.jaxws.impl.SecurityClientTube.processResponse(SecurityClientTube.java:362) 
    at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:972) 
    at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:910) 
    at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:873) 
    at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:775) 
    at com.sun.xml.ws.client.Stub.process(Stub.java:429) 
    at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:168) 
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119) 
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102) 
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151) 
    at $Proxy44.pullCustomers(Unknown Source) 
    at com.tekriti.client.Client.test(Client.java:106) 
    at com.tekriti.client.Client.main(Client.java:44) 
com.sun.xml.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException 
- with linked exception: 
[javax.xml.stream.XMLStreamException: Internal XSB error: Invalid State=0] 
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:141) 
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102) 
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:151) 
    at $Proxy44.pullCustomers(Unknown Source) 
    at com.tekriti.client.Client.test(Client.java:106) 
    at com.tekriti.client.Client.main(Client.java:44) 
Caused by: javax.xml.bind.UnmarshalException 

ama:

Stack Trace şans, Metro istemcisi SOAP cevabını doğru bir şekilde ayrıştıramaz. Nerede hata yaptığımı bilmiyorum ya da başka bir şey kullanmalıyım.
Netbeans 7.1 ve Metro 2.2 kullanıyorum.

Lütfen önerilerinizi iletin veya geçmişte böyle bir sorun yaşarsanız lütfen benimle paylaşın.

güncelleme: Bu iyi çalışıyor

:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <Action>http://cdx.dealerbuilt.com/Api/0.97/IStandardApi/PullCustomers</Action> 
    </s:Header> 
    <s:Body> 
     <PullCustomers xmlns="http://cdx.dealerbuilt.com/Api/0.97/"> 
      <searchCriteria xmlns:d4p1="http://schemas.datacontract.org/2004/07/DealerBuilt.BaseApi" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
       <d4p1:ActivityStoreIds xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
        <d5p1:long>64</d5p1:long> 
       </d4p1:ActivityStoreIds> 

       <d4p1:EnvironmentIds xmlns:d5p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays"> 
        <d5p1:long>27</d5p1:long>  
       </d4p1:EnvironmentIds> 
      </searchCriteria> 
     </PullCustomers> 
    </s:Body> 
</s:Envelope> 

Ama çıkışta Source üreten ve istek SOAP zarfı alır:

 Dispatch<Source> sourceDispatch = null; 
    sourceDispatch = service.createDispatch(portQName, Source.class, Service.Mode.MESSAGE); 

    ((BindingProvider)sourceDispatch).getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY, "http://cdx.dealerbuilt.com/Api/0.97/IStandardApi/PullCustomers"); 
    ((BindingProvider)sourceDispatch).getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, true); 
    Source result = sourceDispatch.invoke(new StreamSource(new StringReader(req))); 

req biri aşağıda içeriyor.

Bu işe yarıyor olmalı.

org.tempuri.StandardApi service = new org.tempuri.StandardApi(); 
    CustomerSearchCriteriaType criteriaType = new CustomerSearchCriteriaType(); 

    QName environmentQName = new QName("http://schemas.datacontract.org/2004/07/DealerBuilt.BaseApi", "EnvironmentIds"); 
    ArrayOflong arrayOflong = new ArrayOflong(); 
    arrayOflong.getLong().add(27l); 
    JAXBElement<ArrayOflong> environmentIds = new JAXBElement<ArrayOflong>(environmentQName, ArrayOflong.class, arrayOflong); 
    criteriaType.setEnvironmentIds(environmentIds); 

    QName activityQName = new QName("http://schemas.datacontract.org/2004/07/DealerBuilt.BaseApi", "ActivityStoreIds"); 
    ArrayOflong arrayOfActivity = new ArrayOflong(); 
    arrayOfActivity.getLong().add(64l); 
    JAXBElement<ArrayOflong> activityIds = new JAXBElement<ArrayOflong>(activityQName, ArrayOflong.class, arrayOfActivity); 
    criteriaType.setActivityStoreIds(activityIds); 

    ArrayOfCustomerType customers = service.getCustomBindingIStandardApi().pullCustomers(criteriaType); 
    if (customers != null) { 
     System.out.println("Size of Customers::::" + customers.getCustomer().size()); 
    } 

talep

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <PullCustomers xmlns="http://cdx.dealerbuilt.com/Api/0.97/"> 
      <searchCriteria> 
       <ActivityStoreIds xmlns="http://schemas.datacontract.org/2004/07/DealerBuilt.BaseApi"> 
        <long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">64</long> 
       </ActivityStoreIds> 
       <EnvironmentIds xmlns="http://schemas.datacontract.org/2004/07/DealerBuilt.BaseApi"> 
        <long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">27</long> 
       </EnvironmentIds> 
      </searchCriteria> 
     </PullCustomers> 
    </soapenv:Body> 
</soapenv:Envelope> 

içeren Fakat çıkışı üretirken kapatır ve çok uzun bir süre sonra yukarıda belirtilen hata üretir.

İstekler arasındaki fark sorun yaratıyor mu yoksa başka bir şey mi var?

cevap

6

Ben EOF olan yasadışı karakter 0x1A içeren veri web hizmeti müşteriye geri dönüyor düşünüyorum.
XML, içinde KONTROL CHAR'a izin vermiyor. Son olarak SOAP XML kullanıyorsunuz.


benzer bir sorun bakınız: illegal character in xml document

çözüm:
1. Ya KONTROL kömürü
2. ortadan Veya web hizmetinde bunu kodlayın ve SOAP istemci adresten çözebilir.

+0

Cevabınız için teşekkür ederiz, lütfen benim güncellememi görebilirsin 1 istek arasındaki herhangi bir sorun var mı? – subodh

+0

@subodh Talep farklıysa, web servisinden SOAP mesajı aldığınız anlamına mı geliyor? – jaxb

+0

Hızlı yanıt için tekrar teşekkürler, istek türü 1'i ikinci istek türüne değiştirdiğimde, aynı hatayı üretecek ve sonra da çıktıyı üretecektir. – subodh