Consumir webservice soap com jax ws

Não tenho experiencia com SOAP, e estou tentando fazer uma integração com JAX WS, porem não está dando certo no java, no SOAP UI está ok, alguém pode me ajudar?

webservice
http://horusws.treinamento.saude.gov.br/horus-ws-service/HorusWSService/HorusWS?wsdl

public class TesteRequestConsultaInconsistencia {

private static final String WS_URL = "http://horusws.treinamento.saude.gov.br/horus-ws-service/HorusWSService/HorusWS?wsdl";
public static void main(String[] args) {
    try {
        URL url = new URL(WS_URL);
        QName qname = new QName("http://www.saude.gov.br/horus-ws", "HorusWSService");
        Service service = Service.create(url, qname);
        HorusWSAsync horusWSAsync = service.getPort(HorusWSAsync.class);
        BindingProvider binding = (BindingProvider) horusWSAsync;
        binding.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, WS_URL);
        binding.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "alessandro@rangtecnologia.com.br");
        binding.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "horus247841");
        binding.getRequestContext().put("SOAPAction", "hor:consultarInconsistencias");
        ProtocoloType protocolo = new ProtocoloType();
        protocolo.setDtRecebimento("31-10-2017 15:34:12");
        protocolo.setNuProtocoloEntrada("17100000023000003132");
        InconsistenciaProcessamentoLoteType inconsistencias = horusWSAsync.consultarInconsistencias(protocolo);
        for (InconsistenciaProcessamentoLoteType.Inconsistencias in : inconsistencias.getInconsistencias()) {
            System.out.println("inconsistencia:" + in.getInconsistencia().getMensagem());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

ERRO:

dez 26, 2017 2:28:42 PM com.sun.xml.ws.wsdl.PayloadQNameBasedOperationFinder
ADVERTÊNCIA: Sem partes do corpo exclusivas! Em uma porta, conforme BP 1.1 R2710, as operações devem ter assinatura de operação exclusiva na conexão para obter despacho com sucesso. Os métodos [consultarInconsistencias, consultarResultadoProcessamento] têm o mesmo bloco do corpo da solicitação {http://www.saude.gov.br/horus-ws/schemas/v1/HorusTypes}protocolo. O método de despacho pode falhar, o runtime tentará despachar usando SOAPAction. Outra opção é ativar o AddressingFeature para o runtime ativado identificar exclusivamente a operação do WSDL usando o cabeçalho wsa:Action.
dez 26, 2017 2:28:42 PM com.sun.xml.ws.wsdl.PayloadQNameBasedOperationFinder
ADVERTÊNCIA: Sem partes do corpo exclusivas! Em uma porta, conforme BP 1.1 R2710, as operações devem ter assinatura de operação exclusiva na conexão para obter despacho com sucesso. Os métodos [consultarInconsistencias, consultarResultadoProcessamento] têm o mesmo bloco do corpo da solicitação {http://www.saude.gov.br/horus-ws/schemas/v1/HorusTypes}protocolo. O método de despacho pode falhar, o runtime tentará despachar usando SOAPAction. Outra opção é ativar o AddressingFeature para o runtime ativado identificar exclusivamente a operação do WSDL usando o cabeçalho wsa:Action.
com.sun.xml.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: Fault occurred while processing. Please see the server log to find more detail regarding exact cause of the failure.
at com.sun.xml.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:193)
at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:131)
at com.sun.xml.ws.client.sei.StubHandler.readResponse(StubHandler.java:253)
at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:203)
at com.sun.xml.ws.db.DatabindingImpl.deserializeResponse(DatabindingImpl.java:290)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:92)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:161)
at com.sun.proxy.$Proxy42.consultarInconsistencias(Unknown Source)
at br.com.rangtecnologia.webservice.horus.TesteRequestConsultaInconsistencia.main(TesteRequestConsultaInconsistencia.java:32)

SOAP UI:

Sei que não é o jeito mais correto mas faço assim:

Tenho um método que recebe um Object (que será transformado em XML) e o SOAP Action que desejo chamar:

	/** 
* Método responsável por criar o envelope SOAP para requisição ao webservice.
* @param pObj - Objeto a ser serializado para XML.
* @param pOperation - Operação SOAP a ser chamada.
* @return {@link String} - Envelope SOAP.
*/ 
private static String getSoapEnvelope(Object pObj, String pOperation) throws EciVtexException {
	String vRet = null;
	StringBuilder vSoapEnvelope = new StringBuilder();
	
	try {
		vSoapEnvelope.append(getSoapHeader(pObj));
		vSoapEnvelope.append("<soapenv:Header/>");
		vSoapEnvelope.append("<soapenv:Body>");
		
		if(isHeaderSoapAction(pObj)) {
			vSoapEnvelope.append("<" + Constants.NS_TEMPURI + pOperation +">");
		}						
		
		vSoapEnvelope.append(XmlUtil.getXmlFromObject(pObj));
		
		if(isHeaderSoapAction(pObj)) {
			vSoapEnvelope.append("</"+ Constants.NS_TEMPURI + pOperation +">");
		}
					
		vSoapEnvelope.append("</soapenv:Body>");
		vSoapEnvelope.append("</soapenv:Envelope>");
		
		vRet = vSoapEnvelope.toString();
	}catch (Exception e) {
		throw new EciVtexException("===> Erro na montagem do envelope SOAP: " + e.getMessage(), e);
	}		
	
	return vRet;
}

O método getXmlFromObject é um marshaller do JAXB:

	/** 
* Método responsável por transformar objeto java em documento XML.
* @param pObject - Objeto java a ser convertido em documento XML.
* @return {@link String} - Documento XML criado a partir do objeto java.
*/ 
public static String getXmlFromObject(Object pObject) throws EciVtexException {
	StringWriter vXml = new StringWriter();
	
	try {
		JAXBContext vContext = JAXBContext.newInstance("br.com.infoxnet.ecivtex.model");
		Marshaller vMarshaller = vContext.createMarshaller();
		
		vMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
        vMarshaller.setProperty(Marshaller.JAXB_ENCODING, "ISO-8859-1");
        
        vMarshaller.marshal(pObject, vXml);
	}catch (Exception e) {
		throw new EciVtexException("===> Erro na transformação do objeto em XML: " + e.getMessage(), e);
	}
	
	return getXmlCorrigido(vXml.toString());
}

Após montado o SOAP Envelope, realizo a chamada do webservice assim:

	/** 
* Método responsável por enviar o request ao webservice SOAP.
* @param pObj - Objeto a ser serializado para XML e enviado ao webservice.
* @param pLoja - Objeto Loja contendo os dados da Loja ecommerce.
* @return {@link String} - Webservice response.
*/ 
public static String sendRequest(Object pObj, Loja pLoja) throws EciVtexException, SOAPException {
	String vRet;
	ByteArrayOutputStream vResponse = new ByteArrayOutputStream();
	SOAPConnection vSoapConn = null;
	final Boolean vIsHttps = pLoja.getUrlProduct().toLowerCase().startsWith("https");
	HttpsURLConnection vHttpsConn = null;
	
	try {
		String vSoapOperation = getSoapOperation(pObj);			
		String vSoapMessage = getSoapEnvelope(pObj, vSoapOperation);
		
		System.out.println(Util.getTextOutput(pObj) + vSoapMessage);
		
		String vAuthentication = pLoja.getUsernameWs() + ":" + pLoja.getPasswordWs();
		
		MessageFactory vMsgFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
		
		MimeHeaders vMimeHeaders = new MimeHeaders();
		vMimeHeaders.addHeader("Content-Type", MediaType.TEXT_XML);
		vMimeHeaders.addHeader("SOAPAction", Constants.SERVER_URI + vSoapOperation);
		vMimeHeaders.addHeader("Authorization", "Basic " + new  String(Base64.encode(vAuthentication.getBytes())));
		
		SOAPMessage vSoapMsg = vMsgFactory.createMessage(vMimeHeaders, new ByteArrayInputStream(vSoapMessage.getBytes(StandardCharsets.UTF_8)));
		
		vSoapConn = SOAPConnectionFactory.newInstance().createConnection();
		
		URL vUrl = new URL(pLoja.getUrlProduct());
		
		if(vIsHttps) {
			SSLContext vSslContext = SSLContext.getInstance("SSL");
			TrustManager[] vTrustAll = new TrustManager[] {new TrustAllCertificates()};
			vSslContext.init(null, vTrustAll, new java.security.SecureRandom());
			HttpsURLConnection.setDefaultSSLSocketFactory(vSslContext.getSocketFactory());
			
			vHttpsConn = (HttpsURLConnection) vUrl.openConnection();
			vHttpsConn.setHostnameVerifier(new TrustAllHosts());
			vHttpsConn.connect();
		}
		
		SOAPMessage vSoapResp = vSoapConn.call(vSoapMsg, vUrl);		
		
		vSoapResp.writeTo(vResponse);
		
		vRet = new String(vResponse.toByteArray(), StandardCharsets.UTF_8);			
	}catch (Exception e) {
		throw new EciVtexException("===> Erro na requisição SOAP: " + e.getMessage(), e);
	}finally {
		vSoapConn.close();
		
		if(vIsHttps) {
			vHttpsConn.disconnect();
		}
	}
	
	return vRet;
}

Neste caso a autenticação é por usuário e senha no header da requisição. Qualquer dúvida estamos ai.