@Override
    public boolean hasInfo(String name, String node, JID senderJID) throws UnauthorizedException
    {
        if (node == null) return true;
        JID recipientJID = XMPPServer.getInstance().createJID(name, null, true).asBareJID();
        PEPService pepService = pepServiceManager.getPEPService(recipientJID);

        final Node pubsubNode = pepService.getNode(node);
        if (pubsubNode == null) {
            // XEP-0163 defines the default access model to be 'presence'
            try {
                final Roster roster = XMPPServer.getInstance().getRosterManager().getRoster(recipientJID.getNode());
                final RosterItem rosterItem = roster.getRosterItem(senderJID);
                if (rosterItem == null || rosterItem.getSubStatus().equals(RosterItem.SubType.NONE) || rosterItem.getSubStatus().equals(RosterItem.SubType.TO)) {
                    throw new UnauthorizedException();
                }
            } catch (UserNotFoundException e) {
                throw new UnauthorizedException();
            }

            // Authorized, but non-existing node.
            return false;
        } else if (!pubsubNode.getAccessModel().canAccessItems(pubsubNode, senderJID, senderJID)) {
            throw new UnauthorizedException();
        } else {
            return true;
        }
    }
The following functions are unimplemented required interface methods.
xmppserver/src/main/java/org/jivesoftware/openfire/pep/IQPEPHandler.java