问题描述
好吧,我正在使用 Java 中的 SOAP,我正在使用 Apache.CXF 2.7.18,我正在尝试执行以下代码。
package org.example.consumo_soap;
import java.lang.String;
import static java.lang.System.exit;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import com.dc.hc.ws.v1.Parametro;
import com.dc.hc.ws.v1.Parametros;
import com.dc.hc.ws.v1.HCBException;
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyfactorybean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
import org.apache.ws.security.WSConstants;
import org.apache.ws.security.handler.WSHandlerConstants;
public final class App {
private App() {}
public static void main(String[] args) throws Exception {
System.setProperty("javax.net.ssl.trustStore","xxxxxxxxxxxxx.p12");
System.setProperty("javax.net.ssl.trustStoreType","PKCS12");
System.setProperty("javax.net.ssl.trustStorePassword","xxxxxxxxxxxx");
System.setProperty("javax.net.ssl.keyStore","xxxxxxxxxxxxx.p12");
System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
System.setProperty("javax.net.ssl.keyStorePassword","xxxxxxxxxxxx");
JaxWsProxyfactorybean factory = new JaxWsProxyfactorybean();
factory.setAddress("https://xxxxxxxxx.xxxx:443/wss/xxxx/servicex/DHService");
factory.setServiceClass(HC.class);
Object client = (HC) factory.create();
LoggingOutInterceptor loggingOutInterceptor = new LoggingOutInterceptor();
loggingOutInterceptor.setPrettyLogging(true);
ClientProxy.getClient(client).getoutInterceptors().add(loggingOutInterceptor);
LoggingInInterceptor loggingInInterceptor = new LoggingInInterceptor();
loggingInInterceptor.setPrettyLogging(true);
ClientProxy.getClient(client).getininterceptors().add(loggingInInterceptor);
//~
Map<String,Object> propsOut = new HashMap<String,Object>();
propsOut.put(WSHandlerConstants.ACTION,WSHandlerConstants.SIGNATURE + " " + WSHandlerConstants.USERNAME_TOKEN + " " + WSHandlerConstants.TIMESTAMP);
//~ propsOut.put(WSHandlerConstants.TIMESTAMP,"60");
propsOut.put(WSHandlerConstants.TIMESTAMP_PRECISION,"true");
propsOut.put(WSHandlerConstants.USER,"2-24252523235");
propsOut.put(WSHandlerConstants.PASSWORD_TYPE,WSConstants.PW_TEXT);
propsOut.put(WSHandlerConstants.PW_CALLBACK_CLASS,PasswordClientCallBackHandler.class.getName());
propsOut.put(WSHandlerConstants.ADD_UT_ELEMENTS,WSConstants.NONCE_LN + " " + WSConstants.CREATED_LN);
propsOut.put
(
WSHandlerConstants.SIGNATURE_PARTS,"{Content}{http://schemas.xmlsoap.org/soap/envelope/}Body;{Element}{http://docs.oasisopen.org/wss/2004/01/oasis-200401-wss-wssecurity-secext1.0.xsd}Usernametoken;{Element}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd}Timestamp;"
);
WSS4JOutInterceptor wss4jOut = new WSS4JOutInterceptor(propsOut);
ClientProxy.getClient(client).getoutInterceptors().add(wss4jOut);
//~
HTTPConduit httpConduit = (HTTPConduit) ClientProxy.getClient(client).getConduit();
TLSClientParameters tlsCP = new TLSClientParameters();
tlsCP.setdisableCNCheck(true);
httpConduit.setTlsClientParameters(tlsCP);
HC port = (HC) client;
System.out.println("Invoking consultarHC...");
String idsus = "24252523235";
String clasus = "xxxxxxxxxxxxx";
String tipoid = "20";
String id = "437191799";
String papellido = "Castro";
Parametros parametros = new Parametros();
List<Parametro> list_parametros = new ArrayList<Parametro>();
Parametro parametro = new Parametro();
parametro.setNombre("");
parametro.setTipo("");
parametro.setValor("");
list_parametros.add(parametro);
parametros.getParametro().addAll(list_parametros);
try {
String _consultarHC__return = port.consultarHC(idsus,clasus,tipoid,id,papellido,parametros);
System.out.println("consultarHC.result=" + _consultarHC__return);
} catch (Exception e) {
System.out.println("Expected exception: HCBException has occurred.");
System.out.println(e.toString());
}//~ */
}
}
当我执行它时捕获以下异常:
INFORMACIÓN: Creating Service {http://www.xxxxxxxxxxx.com.co/services/xxxxxxxxxxxxxxxx/v1}HCService from class org.example.consumo_soap.HC
Invoking consultarHC...
feb 06,2021 4:03:10 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
WARNING: Interceptor for {http://www.xxxxxxxxxxx.com.co/services/xxxxxxxxxxxxxxxx/v1}HCService#{http://www.xxxxxxxxxxx.com.co/services/xxxxxxxxxxxxxxxx/v1}consultarHC has thrown exception,unwinding Now
java.lang.classCastException: com.sun.org.apache.xerces.internal.dom.ElementNSImpl cannot be cast to javax.xml.soap.soAPElement
at org.apache.cxf.binding.soap.saaj.saajStreamWriter.adjustOverlaidNode(saajStreamWriter.java:67)
at org.apache.cxf.staxutils.OverlayW3CDOMStreamWriter.writeStartElement(OverlayW3CDOMStreamWriter.java:192)
at org.apache.cxf.binding.soap.interceptor.soapOutInterceptor.writeSoapEnvelopestart(SoapOutInterceptor.java:128)
at org.apache.cxf.binding.soap.interceptor.soapOutInterceptor.handleMessage(SoapOutInterceptor.java:87)
at org.apache.cxf.binding.soap.interceptor.soapOutInterceptor.handleMessage(SoapOutInterceptor.java:67)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:572)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:481)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:382)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:335)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:136)
at com.sun.proxy.$Proxy37.consultarHC(UnkNown Source)
at org.example.consumo_soap.App.main(App.java:86)
Expected exception: HCBException has occurred.
javax.xml.ws.soap.soAPFaultException: com.sun.org.apache.xerces.internal.dom.ElementNSImpl cannot be cast to javax.xml.soap.soAPElement
------------------------------------------------------------------------
在 SOAPUI 中,服务消费的头部是:
<soapenv:Header>
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:BinarySecurityToken
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"
ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
wsu:Id="X509-6C3E0EA6E1661184DD161107016391093">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</wsse:BinarySecurityToken>
<ds:Signature Id="SIG-6C3E0EA6E1661184DD161107016395097" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="soapenv v1" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#id-6C3E0EA6E1661184DD161107016391096">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="v1" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>eEAzUQyBWzJRy90Av4FBEx0ov2Y=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>SpixsGA2i0iJXF4xexEUo1wviFxxLVoaLMb+nzKYwSDClS8zLBNc9BDn0UrvbsW6rm21frGRozRm
iNoioWyQND0xmt7inc8BpLSr7+feds2NDLjotbtWsl43cIdIidoXFWfQApgKCKSwOt+deZPcOwCP
Bx5sJSahpzOKyVouvYUVUOVOUVuogusAkNIX+xzl2gOQ83rjyox65nOy0yOKdF5D7i0p+4/CoYUe
yuS63nR7maGjHVUVOUvUWd4B0t8oWL8QaKGNjFQrwgOVOUdxlJqH/xkD05La3Cy17gHyL5JlHzyE
xIH+JODU8nfkDFe/WBnbKzItvpYUcp8tlviKd==</ds:SignatureValue>
<ds:KeyInfo Id="KI-6C3E0EA6E1661184DD161107016391094">
<wsse:SecurityTokenReference wsu:Id="STR-6C3E0EA6E1661184DD161107016391095">
<wsse:Reference URI="#X509-6C3E0EA6E1661184DD161107016391093" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
<wsse:Usernametoken wsu:Id="Usernametoken-6C3E0EA6E1661184DD161107016390892">
<wsse:Username>2-24252523235</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxxxxxxxxxxx</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">mAXRJ1JEgxUIkXzx745teQ==</wsse:Nonce>
<wsu:Created>2021-01-19T15:29:23.908Z</wsu:Created>
</wsse:Usernametoken>
<wsu:Timestamp wsu:Id="TS-6C3E0EA6E1661184DD161107016390891">
<wsu:Created>2021-01-19T15:29:23.908Z</wsu:Created>
<wsu:Expires>2021-01-19T15:30:23.908Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soapenv:Header>
然后,我不知道错误以及为什么它会在 java 中响应该错误。我认为它必须从服务器响应错误 403。而且我没有找到使用 WSS4J 编码标头的正确方法。
提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)