Detalhes da conexão e tempos limite em um cliente de serviço da web java
Eu tenho que implementar um cliente de serviço da web em um determinado arquivo WSDL. Usei a ferramenta 'wsimport' do SDK para criar classes Java a partir do WSDL, bem como uma classe que agrupa o único método do serviço da web (enhanceAddress(auth, param, address)
) em um método java simples. Por enquanto, tudo bem. O serviço da web está funcional e retornando resultados corretamente. O código fica assim:
try {
EnhancedAddressList uniservResponse = getWebservicePort().enhanceAddress(m_auth, m_param, uniservAddress);
//Where the Port^ is the HTTP Soap 1.2 Endpoint
}catch (Throwable e) {
throw new AddressValidationException("Error during uniserv webservice request.", e);
}
O problema agora: preciso obter informações sobre a conexão e qualquer erro que possa ocorrer para preencher vários valores JMX (como COUNT_READ_TIMEOUT, COUNT_CONNECT_TIMEOUT, ...) Infelizmente, o método não lança oficialmente nenhuma exceção, portanto, para para obter detalhes sobre uma ConnectException, preciso usargetCause()
noClientTransportException
isso será lançado.
Pior ainda: tentei testar o valor do tempo limite de leitura, mas não há nenhum. Alterei a localização do serviço no arquivo wsdl para postar a solicitação em um script php que simplesmente espera uma eternidade e não volta. Adivinha o quê: O cliente de serviço da web faznão tempo limite, mas espera para sempre também (eu matei o aplicativo após mais de 30 minutos de espera). Essa não é uma opção para o meu aplicativo, pois, eventualmente, as conexões tcp acabam se algumas delas ficarem "presas".
oenhanceAddress(auth, param, address)
O método não foi implementado, mas anotado com javax.jws. * Anotações, o que significa que não consigo ver / alterar / inspecionar o código realmente executado.
Eu tenho outra opção senão jogar fora todo o wsimport / javax.jsw-stuff e implementar meu próprio cliente de sabão?