FaultException met door SlSvcUtil gegenereerde code

Ik heb een WebService met het volgende wsdl-bestand:

<?xml version='1.0' encoding='UTF-8'?>
 
  
  
  

  
  
  
  
  
  
  
  
  
    

      
        
        
      
    
    
      
        
        
        
      
    
  
  
  
  
  
  
  
  
  
  
  
    
    
      
      
    
    
      
      
    
    
      
        
      
        
      
      
    
    
      
      
        
        
          
        
        
          
        
      
    

    
      
        
      
    
  

Ik heb de SlSvcUtil van de Windows Phone SDK gebruikt om de proxyklassen voor C# SlSvcUtil.exe test.wsdl te genereren.

Dit is een deel van de gegenereerde code:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName="getPOI", WrapperNamespace="com.test", IsWrapped=true)]
public partial class getPOI {

        [System.ServiceModel.MessageBodyMemberAttribute(Order=0)]
        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public int ID;

        public getPOI() {
        }

        public getPOI(int ID) {
            this.ID = ID;
        }
}

private class BBAppWebAccessClientChannel : ChannelBase, BBAppWebAccess
{

    public BBAppWebAccessClientChannel(System.ServiceModel.ClientBase client) : 
            base(client)
    {
    }

    public System.IAsyncResult BegingetPOI(getPOI request, System.AsyncCallback callback, object asyncState)
    {
        object[] _args = new object[1];
        _args[0] = request;
        System.IAsyncResult _result = base.BeginInvoke("getPOI", _args, callback, asyncState);
        return _result;
    }

    public getPOIResponse EndgetPOI(System.IAsyncResult result)
    {
        object[] _args = new object[0];
        getPOIResponse _result = ((getPOIResponse)(base.EndInvoke("getPOI", _args, result)));
        return _result;
    }
}

De FaultException wordt gegenereerd door die getPOIResponse _result = ((getPOIResponse) (base.EndInvoke ("getPOI", _args, result))); .

Ik roep de WebService met de volgende code:

private void Load_Initial_Data()
{
    try
    {
        BBAppWebAccessClient wac = new BBAppWebAccessClient();
        wac.getPOICompleted += new EventHandler(client_GetDataCompleted);
        wac.getPOIAsync(1);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.StackTrace);
    }

}
void client_GetDataCompleted(object sender, getPOICompletedEventArgs e)
{
    //this.DataContext = e.Result;
    Console.WriteLine(e.Result.poiID);
}

Aan de serverzijde is de volgende uitzondering:

22:27:23,789 WARN  [org.apache.cxf.phase.PhaseInterceptorChain] Interceptor for {com.test}BBAppWebAccessService#{com.test}getPOI has thrown exception, unwinding now: org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element (uri:"com.test", local:"ID").
        at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:787) [:2.3.1-patch-01]
        at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:628) [:2.3.1-patch-01]
        at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:133) [:2.3.1-patch-01]
        at org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:109) [:2.3.1-patch-01]
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255) [:2.3.1-patch-01]
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113) [:2.3.1-patch-01]
        at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97) [:2.3.1-patch-01]
        at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461) [:2.3.1-patch-01]
        at org.jboss.wsf.stack.cxf.ServletControllerExt.invoke(ServletControllerExt.java:172) [:3.4.1.GA]
        at org.jboss.wsf.stack.cxf.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:57) [:3.4.1.GA]
        at org.jboss.wsf.stack.cxf.transport.ServletHelper.callRequestHandler(ServletHelper.java:156) [:3.4.1.GA]
        at org.jboss.wsf.stack.cxf.CXFNonSpringServletExt.invoke(CXFNonSpringServletExt.java:90) [:3.4.1.GA]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179) [:2.3.1-patch-01]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103) [:2.3.1-patch-01]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) [:1.0.0.Final]
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159) [:2.3.1-patch-01]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324) [:6.1.0.Final]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242) [:6.1.0.Final]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [:6.1.0.Final]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [:6.1.0.Final]
        at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181) [:6.1.0.Final]
        at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285) [:1.1.0.Final]
        at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261) [:1.1.0.Final]
        at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.1.0.Final]
        at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.1.0.Final]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159) [:6.1.0.Final]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [:6.1.0.Final]
        at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]
        at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]
        at java.lang.Thread.run(Unknown Source) [:1.7.0]
Caused by: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.sun.istack.SAXParseException2; lineNumber: 1; columnNumber: 197; unexpected element (uri:"com.test", local:"ID"). Expected elements are <{}ID>]
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:425) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339) [:2.2]
        at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:764) [:2.3.1-patch-01]
        ... 34 more
Caused by: com.sun.istack.SAXParseException2; lineNumber: 1; columnNumber: 197; unexpected element (uri:"com.test", local:"ID"). Expected elements are <{}ID>
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:642) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:101) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(StructureLoader.java:243) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:242) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:176) [:2.2]
        at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360) [:2.2]
        ... 36 more
Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"com.test", local:"ID"). Expected elements are <{}ID>
        ... 47 more

ClientConfig:

<?xml version="1.0" encoding="utf-8"?>

    
        
            
                
                    
                
            
        
        
            
        
    

Bericht vastgelegd met Fiddler (Windows Phone):


    
        
            1
        <
    /s:Body>

Bericht vastgelegd met Fiddler (Axis2):


    
        
            1
        
    

Hoe kan ik het repareren? De gegenereerde Java-code (Apache Axis2) werkt prima.

Bedankt voor alle adviezen.

0
Ja, ik heb het geprobeerd en ik kreeg dezelfde fout ook. Maar voel je vrij om het zelf te testen en verslag uit te brengen over je resultaten.
toegevoegd de auteur CSchulz, de bron
Er is geen online service, omdat deze in ontwikkeling is. Het spijt me.
toegevoegd de auteur CSchulz, de bron
Ik heb de ClientConfig toegevoegd. Ik hoop dat het de juiste configuratie is.
toegevoegd de auteur CSchulz, de bron
Dit kan een configuratieprobleem zijn. Heeft u geprobeerd de code te genereren met behulp van 'Serviceformaat toevoegen' in Visual Studio?
toegevoegd de auteur calum, de bron
Ik heb het serviceadres nodig.
toegevoegd de auteur calum, de bron
OK. Als je je config post, kan ik je misschien nog steeds helpen.
toegevoegd de auteur calum, de bron

2 antwoord

Ik heb de oplossing gevonden. Wanneer u de WebService met Java EE maakt, moet u alle naamruimten toevoegen, anders krijgt u de bovenstaande fouten.
Na het repareren van de FaultException kreeg ik een NullReferenceException , wat aangeeft dat ik ook de responsafhandeling moet repareren.

Hartelijk bedankt voor @calum .

Hier is een voorbeeldimplementatie van de WebService, die samenwerkt met Axis2 en de SLsvcUtil-tool:

package com.test;

//imports here

@WebService(targetNamespace = "com.test")
public class BBAppWebAccess {
    @WebMethod
    @WebResult(targetNamespace="com.test.poi")
    public POI getPOI(
            @WebParam(name="ID", targetNamespace="com.test.poi")
            int id) {

        return new POI(id);
    }
}

Het nieuwe bericht ziet er als volgt uit:


    
        
            1
        
    

De nieuwe genereated getPOI -klasse:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName="getPOI", WrapperNamespace="com.test", IsWrapped=true)]
public partial class getPOI {

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="com.test.poi", Order=0)]
    public int ID;

    public getPOI() {
    }

    public getPOI(int ID) {
        this.ID = ID;
    }
}
2
toegevoegd
Ik ben blij dat je het hebt laten werken, je moet dit bericht markeren als het antwoord.
toegevoegd de auteur calum, de bron

Het lijkt erop dat u de service het verkeerde type verzendt (ik neem aan dat dit de fout is die aangeeft dat een onverwacht element 'ID' is gevonden en dat dit betekent dat uw verzoek niet goed is gevormd). Gebruik fiddler (indien mogelijk) om te zien wat je naar de server stuurt. U zult waarschijnlijk kunnen achterhalen wat er gebeurt en vervolgens kunt u de gegenereerde code bijwerken zodat het juiste type wordt verzonden.

1
toegevoegd
Ik heb beide berichten toegevoegd die met Fiddler hierboven zijn gemaakt, het enige verschil is de naamruimte en ik weet niet hoe ik dit moet oplossen
toegevoegd de auteur CSchulz, de bron
Code toegevoegd, ik hoop dat je me kunt helpen.
toegevoegd de auteur CSchulz, de bron
Geen verandering, het is dezelfde vioolboodschap.
toegevoegd de auteur CSchulz, de bron
Kunt u alstublieft de definitie van de getPOI-klasse posten.
toegevoegd de auteur calum, de bron
Werkt het als u de WrapperNamespace op het MessageContractAttribute verwijdert? Als dit niet het geval is, plaats dan de fiddler-uitvoer.
toegevoegd de auteur calum, de bron
Dus na het verwijderen van de wrapper namespace krijg je nog steeds in het verzoek ?? U moet de attributen aanpassen totdat het element gekwalificeerd is (zoals in het andere voorbeeld) of helemaal geen namespace (). Het probleem met het verzoek is dat de naamruimte niet is gekwalificeerd, dus het ID-element bevindt zich automatisch in de com.test-naamruimte in plaats van niet-gekwalificeerd te zijn. Probeer de naamruimte van de wrapper in te stellen op een lege tekenreeks (of het lid Naamruimte van het MessageBodyMemberAttribute op de ID-eigenschap).
toegevoegd de auteur calum, de bron