簡體   English   中英

如何從PTC Windchill PDMLink中的Java Web服務指定憑據

[英]How to specify credentials from a Java Web Service in PTC Windchill PDMLink

我目前正在研究使用Java Web Service(如Windchill的Info * Engine文檔所述)以檢索有關零件的信息的可能性。 我正在使用Windchill版本10.1。

我已經成功部署了一個Web服務,該服務在.Net應用程序中使用。 不嘗試訪問Windchill信息的呼叫成功完成。 但是,當嘗試檢索零件信息時,出現了wt.method.AuthenticationException。

這是在webService中運行的代碼(Web服務方法僅調用此方法)

public static String GetOnePart(String partNumber) throws WTException
{
    WTPart part=null;

    RemoteMethodServer server  =  RemoteMethodServer.getDefault();   
    server.setUserName("theUsername");   
    server.setPassword("thePassword");

    try {
        QuerySpec qspec= new QuerySpec(WTPart.class);
        qspec.appendWhere(new SearchCondition(WTPart.class,WTPart.NUMBER,SearchCondition.LIKE,partNumber),new int[]{0,1});

        // This fails.
        QueryResult qr=PersistenceHelper.manager.find((StatementSpec)qspec);
        while(qr.hasMoreElements())
        {
            part=(WTPart) qr.nextElement();
            partName = part.getName();
        }
    } catch (AuthenticationException e) {
        // Exception caught here.
        partName = e.toString();
    }

    return partName;
}

此代碼可在服務器上部署的命令行應用程序中工作,但在Web服務中執行此操作時將失敗,並出現wt.method.AuthenticationException。 我覺得它失敗了,因為Web服務在MethodServer中,所以我不應該使用RemoteMethodServer。

無論如何,如果有人知道如何做到這一點,那就太好了。 一個額外的問題是如何從Web服務中進行日志記錄,以及如何配置此日志記錄。

謝謝。

您無需使用此代碼在服務器端進行身份驗證

RemoteMethodServer server  =  RemoteMethodServer.getDefault();   
server.setUserName("theUsername");   
server.setPassword("thePassword");

如果您遵循了文檔(windchill幫助中心),則您的Web服務應使用@WebServices和@WebMethod(operationName =“ getOnePart”)進行注釋,並繼承com.ptc.jws.servlet.JaxWsService

另外,您還必須注意部署期間使用的策略。 默認的ant腳本配置有

security.policy=userNameAuthSymmetricKeys

因此,當您使用.Net消耗ws時,需要對其進行管理。

對於事件記錄,您只需要調用默認情況下用$log.debug("Hello")實例化的log4j記錄器$log.debug("Hello")

您無法預先驗證服務器端。

您可以將身份驗證寫入客戶端。 不確定什么是.Net等價物,但這適用於Java客戶端:

private static final String USERNAME = "admin";
private static final String PASSWORD = "password";

static {

    java.net.Authenticator.setDefault(new java.net.Authenticator() {

        @Override
        protected java.net.PasswordAuthentication getPasswordAuthentication() {
            return new java.net.PasswordAuthentication(USERNAME, PASSWORD.toCharArray());
        }
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM