6

Tôi đang sử dụng Metro 2 ứng dụng khách để sử dụng "Dịch vụ web bảo mật wcf trong Java". Nhưng Metro khách hàng không cung cấp cho bất kỳ phản ứng và ở lại treo chế độ sau một thời gian rất dài nó tạo ra đầu ra như một lỗi:Đã xảy ra lỗi trong khi đệm thông báo SOAP đến bằng cách sử dụng ứng dụng khách Metro

Stack Trace:

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 

Tôi cố gắng để khắc phục vấn đề này nhưng không có may mắn, khách hàng Metro không thể phân tích cú pháp phản hồi SOAP theo cách chính xác. Tôi không biết mình đang làm sai ở đâu hoặc tôi phải sử dụng cái gì khác.
Tôi đang sử dụng Netbeans 7.1Metro 2.2.

Vui lòng đưa ra đề xuất của bạn hoặc nếu bạn gặp vấn đề như vậy trong quá khứ, vui lòng chia sẻ với tôi.

cập nhật:

này đang làm việc tốt:

 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 chứa dưới một:

<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> 

Nhưng nó tạo Source trong đầu ra và mất phong bì SOAP trong yêu cầu.

Tôi cần điều này sẽ hoạt động.

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()); 
    } 

Yêu cầu chứa

<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> 

Nhưng nó bị treo trong khi sản xuất đầu ra và sau một thời gian rất dài nó tạo ra các lỗi nêu trên.

Sự khác biệt giữa các yêu cầu có gây ra sự cố hoặc điều gì khác không?

Trả lời

6

Tôi nghĩ dịch vụ web dữ liệu đang quay lại ứng dụng chứa ký tự không hợp lệ 0x1aEOF.
XML không cho phép CONTROL CHAR trong đó. Khi bạn đang sử dụng SOAP XML cuối cùng.

Xem các vấn đề tương tự: illegal character in xml document

giải pháp:
1. Hoặc bạn có thể loại bỏ KIỂM SOÁT char
2. Hoặc Mã hóa nó trong web-dịch vụ và giải mã nó ở client SOAP.

+0

Cảm ơn bạn đã trả lời, bạn có thể vui lòng xem cập nhật 1 của tôi có sự khác biệt nào giữa yêu cầu không? – subodh

+0

@subodh Bạn có nghĩa là nếu yêu cầu khác nhau, bạn nhận được thông báo SOAP từ dịch vụ web? – jaxb

+0

Cảm ơn một lần nữa cho phản ứng nhanh chóng, Khi tôi thay đổi loại yêu cầu hình thức 1 để yêu cầu loại thứ hai, sau đó nó sẽ sản xuất các lỗi tương tự và sau đó sản xuất đầu ra cũng có. – subodh

Các vấn đề liên quan