调用web服务时javax.xml.ws.soap.SOAPFaultException

调用web服务时javax.xml.ws.soap.SOAPFaultException,java,cxf,webservice-client,Java,Cxf,Webservice Client,我在eclipse中使用Apache CXF 2.x从以下WSDL创建了一个Web服务客户端: 在执行web服务调用时,我得到以下错误stacktrace(服务器无法处理请求-->对未建立为对象实例的对象的引用): 我是这样做的: ObjectFactory of = new ObjectFactory(); AuthenticationHeader ah = of.createAuthenticationHeader(); ah.setUserName(cfdi.getUsu

我在eclipse中使用Apache CXF 2.x从以下WSDL创建了一个Web服务客户端:

在执行web服务调用时,我得到以下错误stacktrace(服务器无法处理请求-->对未建立为对象实例的对象的引用):

我是这样做的:

ObjectFactory of = new ObjectFactory();
    AuthenticationHeader ah = of.createAuthenticationHeader();
    ah.setUserName(cfdi.getUsuarioPAC());
    ah.setPassword(cfdi.getPasswordPAC());
    JAXBElement<AuthenticationHeader> jah = of.createAuthenticationHeader(ah);

    ServicioTimbradoPruebas stp = new ServicioTimbradoPruebas();
    ServicioTimbradoPruebasSoap stpSoap = stp.getServicioTimbradoPruebasSoap();

    try{
        WSBindingProvider bp = (WSBindingProvider)stpSoap;
        Header hdr = Headers.create((JAXBRIContext) JAXBContext.newInstance(AuthenticationHeader.class),jah);
        bp.setOutboundHeaders(hdr);
    }catch(Exception ex){
        ex.printStackTrace();
        error = "Error en webservice ";
    }
    byte [] xmlBytes = cfdi.getXml().getBytes("UTF-8");
    String result = stpSoap.generaTimbre(xmlBytes);

以前我能够调用web服务,但是现在我不能这样做,我得到了以下错误。关于如何解决这个问题,有什么建议吗?

我想这不是什么答案,但无论如何:

那项服务真是一团糟

比如说

<cfdi:xmlBytes>cdi:246460475753</cfdi:xmlBytes>
cdi:246460475753 在


根据WSDL契约,是可选的:

     <s:element name="GeneraTimbre">
        <s:complexType>
           <s:sequence>
              <s:element minOccurs="0" maxOccurs="1" name="xmlBytes" type="s:base64Binary"/>
           </s:sequence>
        </s:complexType>
     </s:element>

(注意minOccurs=“0”!) 但是,当您发送的消息没有可选部分时,您将收到soapfault:

 <soap:Body>
      <soap:Fault>
         <faultcode>soap:MustUnderstand</faultcode>
         <faultstring>No se entendió el encabezado SOAP Security.</faultstring>
      </soap:Fault>
   </soap:Body>

肥皂:我必须理解
没有安全性。

正如我在开始时所说,这不是一个很好的答案,也许只是一个建议:尽量远离如此糟糕的书面服务。(我的猜测是,他们试图实现ws-sec,但没有ws-policy框架,ws-policy框架可以做到,但对服务消费者如何正确使用它几乎没有或根本没有帮助)

我想这不是一个很好的答案,但无论如何:

那项服务真是一团糟

比如说

<cfdi:xmlBytes>cdi:246460475753</cfdi:xmlBytes>
cdi:246460475753 在


根据WSDL契约,是可选的:

     <s:element name="GeneraTimbre">
        <s:complexType>
           <s:sequence>
              <s:element minOccurs="0" maxOccurs="1" name="xmlBytes" type="s:base64Binary"/>
           </s:sequence>
        </s:complexType>
     </s:element>

(注意minOccurs=“0”!) 但是,当您发送的消息没有可选部分时,您将收到soapfault:

 <soap:Body>
      <soap:Fault>
         <faultcode>soap:MustUnderstand</faultcode>
         <faultstring>No se entendió el encabezado SOAP Security.</faultstring>
      </soap:Fault>
   </soap:Body>

肥皂:我必须理解
没有安全性。

正如我在开始时所说,这不是一个很好的答案,也许只是一个建议:尽量远离如此糟糕的书面服务。(我猜他们试图实现ws-sec,但没有ws-policy框架,ws-policy框架可以实现,但对服务消费者如何正确使用它几乎没有帮助)

我知道服务没有正确构建。但我需要使用这个web服务,因为它是在墨西哥进行电子发票所必需的。任何帮助都会很感激,因为他们误用了Web服务的整个“合同”部分,我认为你只有两个选择:花大量时间尝试错误,或者联系他们获取一个工作样本……我知道服务没有正确构建。但我需要使用这个web服务,因为它是在墨西哥进行电子发票所必需的。任何帮助都会很感激,因为他们滥用了整个Web服务的“合同”部分,我认为你只有两个选择:花大量时间尝试错误,或者联系他们获取工作样本。。。