org.jboss.resteasy.le spi.UnhandledException: javax. xml. ws. soap. SOAPFaultException: ARERR [149] Un nom d'utilisateur doit être fourni dans l'enregistrement de contrôle


Salut à tous j'ai besoin d'une aide.

J'écris le wrapper en haut du wsdl.

Ma demande SOAPUI est :-

Je dois envoyer ma demande comme ceci

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:UET_CMContacts_WS">
   <soapenv:Header>
      <urn:AuthenticationInfo>
         <urn:userName>test</urn:userName>
         <urn:password>test</urn:password>
      </urn:AuthenticationInfo>
   </soapenv:Header>
   <soapenv:Body>
      <urn:opGetContacts>
         <urn:Qualification>LoginName="TEST"</urn:Qualification>
         <urn:startRecord>0</urn:startRecord>
         <urn:maxLimit>20</urn:maxLimit>
      </urn:opGetContacts>
   </soapenv:Body>
</soapenv:Envelope>

Voici mon code Java

        UETCMContactsWSService service1 = new UETCMContactsWSService();
        service1.setHandlerResolver(new SOAPHandlerResolver());
        ContactDetailsPortType port1 = service1.getContactDetailsSoap();

        AuthenticationInfo authInfo = new AuthenticationInfo();
        authInfo.setUserName(uetRequestParameters.getUserName());
        authInfo.setPassword(uetRequestParameters.getPassword());

        Map<String, Object> requestContext = ((BindingProvider)port1).getRequestContext();
        requestContext.put(BindingProvider.USERNAME_PROPERTY, uetRequestParameters.getUserName());  
        requestContext.put(BindingProvider.PASSWORD_PROPERTY, uetRequestParameters.getPassword());  
        requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, requestContext);    

        InputMapping1 inputMap = new InputMapping1();
        inputMap.setQualification(uetRequestParameters.getQualification());
        inputMap.setStartRecord(uetRequestParameters.getStartRecord());
        inputMap.setMaxLimit(uetRequestParameters.getMaxLimit());

         List<GetListValues>  getListValue= port1.opGetContacts(
                 inputMap.getQualification(),
                 inputMap.getStartRecord(),
                 inputMap.getMaxLimit());

En utilisant ce code quand je regarde ma réponse dans SOAPHandler

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/>
    <soap:Body>
        <opGetContacts xmlns="urn:UET_CMContacts_WS">
            <Qualification>VKUMARRA</Qualification>
            <startRecord>0</startRecord>
            <maxLimit>20</maxLimit>
        </opGetContacts>
    </soap:Body>
</soap:Envelope>

Et aussi je reçois l'exception: -

12:50:15,924 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/UETProfile].[Resteasy]] (http-localhost/127.0.0.1:8080-1) JBWEB000236: Servlet.service() for servlet Resteasy threw exception: org.jboss.resteasy.spi.UnhandledException: javax.xml.ws.soap.SOAPFaultException: ARERR [149] A user name must be supplied in the control record
    at org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:365) [resteasy-jaxrs-2.3.7.Final-redhat-2.jar:2.3.7.Final-redhat-2]
    [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920) [jbossweb-7.2.2.Final-redhat-1.jar:7.2.2.Final-redhat-1]
    at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_65]
Caused by: javax.xml.ws.soap.SOAPFaultException: ARERR [149] A user name must be supplied in the control record
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:157)
    at com.sun.proxy.$Proxy62.opGetContacts(Unknown Source)
    at com.cox.etadirect.rs.route.GetUetProfileWS.startRoute(GetUetProfileWS.java:90) [classes:]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_65]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_65]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_65]

Quelqu'un a une idée à ce sujet où je vais mal.

Author: Vivek Kumar Ray, 2014-11-18

1 answers

Il y a certaines choses dans votre code qui, je pense, ne correspondent pas à votre demande. Par exemple, comme vous l'avez dit, vous souhaitez ajouter le fragment xml suivant dans votre soap:Header

<soap:Header>
   <urn:AuthenticationInfo>
      <urn:userName>test</urn:userName>
      <urn:password>test</urn:password>
   </urn:AuthenticationInfo>
</soap:Header>

Comme je le vois dans votre code, vous créez cette structure:

AuthenticationInfo authInfo = new AuthenticationInfo();
authInfo.setUserName(uetRequestParameters.getUserName());
authInfo.setPassword(uetRequestParameters.getPassword());

Cependant, dans votre code, vous le définissez mais ne l'affectez pas dans la requête soap:Header.

Vous essayez également d'ajouter et http heades pour {[6] } ce qui, je pense, n'est pas nécessaire pour votre WS (au moins, vous ne le dites pas dans votre question):

Map<String, Object> requestContext = ((BindingProvider)port1).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, uetRequestParameters.getUserName());  
requestContext.put(BindingProvider.PASSWORD_PROPERTY, uetRequestParameters.getPassword());  
requestContext.put(MessageContext.HTTP_REQUEST_HEADERS, requestContext);  

Je pense que la solution est simplement mise authInfo dans le soap:Header comme le WS l'attend.

J'espère que cela aide,

 0
Author: albciff, 2014-11-19 12:44:10