OSGI предоставляет сообщение об ошибке «ClassNotFoundException: org.w3c.dom. ***» при выпуске - PullRequest
4 голосов
/ 14 ноября 2011

Я только написал следующие коды в функции Activator.start ()

    public void start(BundleContext bundleContext) throws Exception {
    Activator.context = bundleContext;
    Node node = new Node() {

        @Override
        public Object setUserData(String arg0, Object arg1, UserDataHandler arg2) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void setTextContent(String arg0) throws DOMException {
            // TODO Auto-generated method stub

        }

        @Override
        public void setPrefix(String arg0) throws DOMException {
            // TODO Auto-generated method stub

        }

        @Override
        public void setNodeValue(String arg0) throws DOMException {
            // TODO Auto-generated method stub

        }

        @Override
        public Node replaceChild(Node arg0, Node arg1) throws DOMException {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Node removeChild(Node arg0) throws DOMException {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void normalize() {
            // TODO Auto-generated method stub
            System.out.println("normalize 方法调用");

        }

        @Override
        public String lookupPrefix(String arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String lookupNamespaceURI(String arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public boolean isSupported(String arg0, String arg1) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean isSameNode(Node arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean isEqualNode(Node arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean isDefaultNamespace(String arg0) {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public Node insertBefore(Node arg0, Node arg1) throws DOMException {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public boolean hasChildNodes() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public boolean hasAttributes() {
            // TODO Auto-generated method stub
            return false;
        }

        @Override
        public Object getUserData(String arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String getTextContent() throws DOMException {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Node getPreviousSibling() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String getPrefix() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Node getParentNode() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Document getOwnerDocument() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String getNodeValue() throws DOMException {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public short getNodeType() {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public String getNodeName() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Node getNextSibling() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String getNamespaceURI() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String getLocalName() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Node getLastChild() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Node getFirstChild() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Object getFeature(String arg0, String arg1) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public NodeList getChildNodes() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public String getBaseURI() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public NamedNodeMap getAttributes() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public short compareDocumentPosition(Node arg0) throws DOMException {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public Node cloneNode(boolean arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Node appendChild(Node arg0) throws DOMException {
            // TODO Auto-generated method stub
            return null;
        }
    };
    node.normalize();
}

Все идет хорошо при запуске в среде Eclipse, но при выпуске продукта ошибки в журнале при запуске:

Исключение корня: java.lang.NoClassDefFoundError: org / w3c / dom / Node

Причина: java.lang.ClassNotFoundException: org.w3c.dom.Node

Кто-нибудь может оказать помощь?

Ответы [ 4 ]

7 голосов
/ 14 ноября 2011

OSGi предоставляет доступ к системным пакетам, но только по умолчанию к пакетам java. *, Кроме других пакетов, таких как: javax.net, javax.xml, com.sun

Таким образом, необходимо указать любой из таких пакетов для платформы OSGi, чтобы экспортировать их через системный пакет, делая их доступными для других пакетов, которые их импортируют.

Чтобы сделать это, вам нужно установить свойство конфигурации с дополнительными пакетами, необходимыми для ваших пакетов, попробуйте установить его как системное свойство перед запуском инфраструктуры OSGi, чтобы оно выбирало это свойство при первом запуске.

Если вы используете OSGi 4.2, это свойство будет настроено следующим образом:

org.osgi.framework.system.packages.extra=org.w3c.dom

Вы можете проверить Свойства конфигурации Apache Felix Framework для получения более подробной информации, хотя это свойство является частью спецификации OSGi и поэтому должно быть доступно и в других реализациях

1 голос
/ 14 ноября 2011

Пожалуйста, обновите свой вопрос, чтобы включить MANIFEST.MF пакета

Похоже, org.w3c.dom неявным образом не предоставляется в вашей продукции. Проверьте заголовок Import-Package, возможно, у вас нет Import-Package: org.w3c.dom

0 голосов
/ 09 сентября 2014

в моем случае добавление

org.osgi.framework.bootdelegation=xx...xxx,org.w3c.dom

решил мою проблему.

0 голосов
/ 23 ноября 2011

Если вы используете Equinox, вы можете отредактировать файл config.ini и добавить «org.w3c.dom» в ключ org.osgi.framework.system.packages и импортировать те же пакеты в ваш манифест .mf

...