如何在PTC Windchill PDMLink中指定Java Web Service的凭据

时间:2014-01-21 20:19:58

标签: ptc-windchill

我目前正在调查使用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。我觉得它失败了,因为RemoteMethodServer的使用不是我应该做的,因为Web服务在MethodServer中。

无论如何,如果有人知道如何做到这一点,那就太棒了。 一个额外的问题是如何从Web服务中进行登录,以及如何配置此日志记录。

谢谢。

2 个答案:

答案 0 :(得分:1)

您无需使用此代码在服务器端进行身份验证

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消费你的w时,你需要管理它。

对于记录事件,您只需要调用默认情况下使用$log.debug("Hello")

实例化的log4j记录器

答案 1 :(得分:0)

您无法预先验证服务器端。

您可以将auth写入您的客户端。不确定.Net equivilent是什么,但这适用于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());
        }
    });
}