调用web服务时javax.xml.ws.soap.SOAPFaultException
我在eclipse中使用Apache CXF 2.x从以下WSDL创建了一个Web服务客户端: 在执行web服务调用时,我得到以下错误stacktrace(服务器无法处理请求-->对未建立为对象实例的对象的引用): 我是这样做的:调用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
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服务的“合同”部分,我认为你只有两个选择:花大量时间尝试错误,或者联系他们获取工作样本。。。