2 回答

TA貢獻1856條經驗 獲得超11個贊
試試這個init()方法,你可能需要添加一個WebLogic憑證提供者:
private void init() {
AddressingFeature feature = new AddressingFeature(true, false);
MyService proxy = service.getMyService(feature);
List<Handler> handlerChain = new ArrayList<>();
// Add a handler to the handler chain
handlerChain.add(new PasswordDigestHeaderHandler());
BindingProvider bindingProvider = (BindingProvider) proxy;
Binding binding = bindingProvider.getBinding();
binding.setHandlerChain(handlerChain);
// weblogic.xml.crypto.wss.provider.CredentialProvider
// weblogic.wsee.security.unt.ClientUNTCredentialProvider
List<CredentialProvider> credProviders = new ArrayList<>();
credProviders.add(new ClientUNTCredentialProvider(USERNAME.getBytes(), PASSWORD.getBytes()));
Map<String, Object> context = bindingProvider.getRequestContext();
// weblogic.xml.crypto.wss.WSSecurityContext
context.put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST, credProviders);
// weblogic.security.SSL.TrustManager
context.put(
WSSecurityContext.TRUST_MANAGER,
new TrustManager() {
public boolean certificateCallback(X509Certificate[] chain, int validateErr) {
return true;
}
}
);
threadLocalClient.set(proxy);
}

TA貢獻1794條經驗 獲得超8個贊
試試這個。
下載描述您的服務的 WSDL 文件并通過注釋掉定義wsp:PolicyReference:的行來修改它。
將它放在一個文件夾中,該文件夾將包含在您的 jar/war/ear 文件中(例如 META-INF/wsdl)。
在您的 Web 服務客戶端中,更改您的 @WebServiceRef 注入以引用此本地/捆綁版本的 WSDL:
@WebServiceRef(wsdlLocation = "META-INF/wsdl/MyService.wsdl")
private MyServiceInterface service;
將您的客戶端初始化代碼修改為如下所示:
AddressingFeature feature = new AddressingFeature(true, false);
MyService proxy = service.getMyService(feature);
BindingProvider bindingProvider = (BindingProvider) proxy;
List<Handler> handlerChain = new ArrayList<Handler>();
//Add a handler to the handler chain
handlerChain.add( new PasswordDigestHeaderHandler() );
Binding binding = bindingProvider.getBinding();
binding.setHandlerChain(handlerChain);
// Add these two lines, to point to the remote service
Map<String, Object> context = bindingProvider.getRequestContext();
context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, REMOTE_SERVICE_ENDPOINT);
threadLocalClient.set(proxy);
... 其中 REMOTE_SERVICE_ENDPOINT 是您正在訪問的遠程 Web 服務的 URL。
那應該這樣做。您不必修改 PasswordDigestHeaderHandler 實現。
我在完全相同的問題上花了相當多的時間,但這個線程讓我走上了正確的道路:https ://community.oracle.com/thread/2485783 。
祝你好運。
添加回答
舉報