javax.xml.ws.WebServiceException:无法访问WSDL.回复:'401:未经授权'

Adr*_*ria 2 java wsdl weblogic jax-ws webservice-client

我正在尝试访问我正在处理的项目的Web服务.我正在使用JAX-WS,应用程序部署在weblogic上.当我试图访问WS时,我得到以下异常:

javax.portlet.PortletException: javax.xml.ws.WebServiceException: Failed to access the WSDL at: http://xxx.xxxx.ro:40000/idm/ws/cup?wsdl. It failed with: 
Response: '401: Unauthorized' for url: 'http://xxx.xxxx.ro:40000/idm/ws/cup?wsdl'.
at com.bea.portlet.container.PortletStub.processAction(PortletStub.java:346)
at com.bea.portlet.container.AppContainer.invokeProcessAction(AppContainer.java:678)
........
Run Code Online (Sandbox Code Playgroud)

我阅读了很多关于问题的帖子,我尝试了不同类型的auth.我尝试在不同的用例中使用BindingProvider,basicHTTPAuth,禁用HostnameVerifier等但仍然没有结果.

以下是我的代码片段,作为最后一个尝试过的版本:

Authenticator.setDefault(new Authenticator() {
                    @Override
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(
                            username,
                            password.toCharArray());
                    }
                });


    ComputeUserProfileImplService computeUserProfileImplService = new ComputeUserProfileImplService(
    new URL(null, endpointURL, new sun.net.www.protocol.http.Handler()),
    new QName("http://xxx.xx.xxxxx.xxxxx.com/",
            "ComputeUserProfileImplService"));
    ComputeUserProfileImpl computeUserProfile = computeUserProfileImplService
    .getComputeUserProfileImplPort();
Run Code Online (Sandbox Code Playgroud)

ComputeUserProfileImplService代码如下所示:

private final static URL COMPUTEUSERPROFILEIMPLSERVICE_WSDL_LOCATION;
private final static Logger logger = Logger.getLogger(com.xxxxx.xxxxx.xx.xxxxx.cup.ComputeUserProfileImplService.class.getName());

static {
    URL url = null;
    try {
        URL baseUrl;
        baseUrl = com.xxxxx.xxxxx.xx.xxxxx.xxx.ComputeUserProfileImplService.class.getResource("");
        url = new URL(baseUrl, "http://xxxx.xxxxx.ro:40000/idm/ws/cup?wsdl");

    } catch (MalformedURLException e) {
        logger.warning("Failed to create URL for the wsdl Location: 'xxxxxxxxxxxxxxxx', retrying as a local file");
        logger.warning(e.getMessage());
    }
    COMPUTEUSERPROFILEIMPLSERVICE_WSDL_LOCATION = url;
}
Run Code Online (Sandbox Code Playgroud)

很抱歉更换链接,但我没有授权发布它们,因为它是一个非常着名的组织..如果你可以帮我提出一些建议,我将不胜感激.我一直在寻找解决方案,但我被卡住了......我无法弄明白.它应该是适用于我的这个weblogic问题的解决方法......但我找不到它.如果你需要它,我会发布一些其他的片段.希望我对此很清楚.

提前致谢 !!

小智 5

不幸的是,Weblogic有一种不同的方法,它使用自己的URLStreamHandler,由于某种原因忽略了身份验证.

尝试使用Sun的实现:

代替

 url = new URL(address); // use WebLogic handler
Run Code Online (Sandbox Code Playgroud)

使用

 url = new URL(null, address, new sun.net.www.protocol.http.Handler()); // use Sun's handler
Run Code Online (Sandbox Code Playgroud)