0

我目前正在研究使用 Java Web 服务(如 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 服务中进行日志记录,以及如何配置此日志记录。

谢谢你。

4

2 回答 2

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 使用 ws 时,您需要对其进行管理。

对于记录事件,您只需要调用默认实例化的 log4j 记录器$log.debug("Hello")

于 2014-01-23T21:14:05.213 回答
0

您不能预先验证服务器端。

您可以将身份验证写入您的客户端。不确定 .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());
        }
    });
}
于 2017-02-16T14:25:51.233 回答