Fehler beim Puffern der eingehenden SOAP-Nachricht mit Metro-client

Ich bin mit U-Bahn 2 client zu verbrauchen, die "Sicheren wcf-web service in Java". Aber die Metro-client nicht gibt keine Antwort und Aufenthalt in hängen - Modus, nachdem Sie sehr lange Zeit produzieren als Ausgabe ein Fehler:

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

Ich versuche das Problem zu beheben, aber kein Glück, Metro-client ist nicht in der Lage zu analysieren, die SOAP-Antwort in eine richtige Art und Weise. Ich weiß nicht, wo mache ich Fehler oder muss ich etwas anderes verwenden.

Ich bin mit Netbeans 7.1 und U 2.2.

Bitte geben Sie Ihre Vorschläge oder wenn Sie hatte ein solches problem in Ihrer Vergangenheit, bitte mit mir teilen.

aktualisiert:

Dies gut funktioniert:

     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 enthält die nachstehende Tabelle eine:

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

Aber es produziert Source im Ausgang und nimmt SOAP-Umschlag in Auftrag.

Ich Brauche diese sollte funktionieren.

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

Anfrage enthält

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

Aber es hängt bei der Herstellung der Ausgabe und nach der sehr langen Zeit, die es produzieren den oben genannten Fehler.

Ist der Unterschied zwischen den Anfragen, die das problem verursacht oder etwas anderes?

InformationsquelleAutor subodh | 2012-04-02
Schreibe einen Kommentar