Nano Hash - криптовалюты, майнинг, программирование

CXF ДОСГИ ЗООПАРК

Доброе утро,

Я ищу помощи, пожалуйста. Я только новичок.

Я использую cxf-dosgi из дистрибутива DOSGi Apache Karaf Feature.

Я хочу прозрачно использовать службы между двумя удаленными машинами. Итак, у меня есть контейнер karaf на каждой из этих двух машин.


Я протестировал этот пример : чтобы начать с двух контейнеров karaf, размещенных на одной машине, я изменил конфигурацию для тестирования с двумя контейнерами, размещенными на двух разных удаленных машинах. И это прекрасно работает!

Поэтому я хочу сделать то же самое для экспорта для экспорта моих веб-сервисов. Я использую Spring DM. Итак, я делаю это на стороне сервера:

<osgi:service id="osgi-service" ref="myservice" interface="org.apache.camel.Endpoint"> <osgi:service-properties> <entry key="name" value="service"/> <entry key="service.exported.interfaces" value="*"/> </osgi:service-properties> </osgi:service>

Я сделал установку, как в учебнике, с помощью cxf dosgi версии 1.6, но я получаю эту ошибку:

16:25:53,256 | ERROR | pool-21-thread-3 | w.service.RemoteServiceAdminCore  193 | 184 - cxf-dosgi-ri-dsw-cxf - 1.6.0 | failed to create server for interface org.apache.camel.Endpoint
java.lang.NullPointerException
    at java.lang.reflect.Array.newArray(Native Method)[:1.7.0_79]
    at java.lang.reflect.Array.newInstance(Array.java:70)[:1.7.0_79]
    at org.apache.cxf.aegis.type.TypeUtil.getTypeRelatedClass(TypeUtil.java:259)
    at org.apache.cxf.aegis.type.AbstractTypeCreator.createTypeForClass(AbstractTypeCreator.java:108)
    at org.apache.cxf.aegis.type.AbstractTypeCreator.createType(AbstractTypeCreator.java:402)
    at org.apache.cxf.aegis.type.basic.BeanTypeInfo.getType(BeanTypeInfo.java:192)
    at org.apache.cxf.aegis.type.basic.BeanType.getDependencies(BeanType.java:547)
    at org.apache.cxf.aegis.databinding.AegisDatabinding.addDependencies(AegisDatabinding.java:394)
    at org.apache.cxf.aegis.databinding.AegisDatabinding.addDependencies(AegisDatabinding.java:399)
    at org.apache.cxf.aegis.databinding.AegisDatabinding.addDependencies(AegisDatabinding.java:399)
    at org.apache.cxf.aegis.databinding.AegisDatabinding.initializeMessage(AegisDatabinding.java:371)
    at org.apache.cxf.aegis.databinding.AegisDatabinding.initializeOperation(AegisDatabinding.java:283)
    at org.apache.cxf.aegis.databinding.AegisDatabinding.initialize(AegisDatabinding.java:242)
    at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:490)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:550)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:265)
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
    at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:159)
    at org.apache.cxf.dosgi.dsw.handlers.AbstractPojoConfigurationTypeHandler.createServerFromFactory(AbstractPojoConfigurationTypeHandler.java:191)
    at org.apache.cxf.dosgi.dsw.handlers.PojoConfigurationTypeHandler.createServer(PojoConfigurationTypeHandler.java:119)
    at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminCore.exportInterfaces(RemoteServiceAdminCore.java:184)
    at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminCore.exportService(RemoteServiceAdminCore.java:140)
    at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance$1.run(RemoteServiceAdminInstance.java:59)
    at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance$1.run(RemoteServiceAdminInstance.java:57)
    at java.security.AccessController.doPrivileged(Native Method)[:1.7.0_79]
    at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance.exportService(RemoteServiceAdminInstance.java:57)[184:cxf-dosgi-ri-dsw-cxf:1.6.0]
    at org.apache.cxf.dosgi.dsw.service.RemoteServiceAdminInstance.exportService(RemoteServiceAdminInstance.java:41)[184:cxf-dosgi-ri-dsw-cxf:1.6.0]
    at org.apache.cxf.dosgi.topologymanager.exporter.TopologyManagerExport.exportServiceUsingRemoteServiceAdmin(TopologyManagerExport.java:185)[183:cxf-dosgi-ri-topology-manager:1.6.0]
    at org.apache.cxf.dosgi.topologymanager.exporter.TopologyManagerExport.doExportService(TopologyManagerExport.java:168)[183:cxf-dosgi-ri-topology-manager:1.6.0]
    at org.apache.cxf.dosgi.topologymanager.exporter.TopologyManagerExport$3.run(TopologyManagerExport.java:143)[183:cxf-dosgi-ri-topology-manager:1.6.0]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[:1.7.0_79]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)[:1.7.0_79]
    at java.lang.Thread.run(Thread.java:745)[:1.7.0_79]

У вас есть идея, что не так?


Ответы:


1

Ой.. что ты делаешь с 1.4-SNAPSHOT. Во-первых, это не релиз, а во-вторых, он довольно старый.

Еще одна вещь, которая выглядит подозрительно, это service.exported.interfaces=myInterface. Это должно быть полное имя интерфейса Java. Для начала попробуйте для него service.exported.interfaces=*.

Вы должны начать с моего Учебное пособие по CXF DOSGi. Код там должен работать из коробки. Затем вы можете добавить свои изменения в config. Так проще, чем начинать совершенно новое.

09.07.2015
  • Спасибо за ваш ответ, Кристиан, я попробую ваш учебник cxf dosgi. Работает ли этот пример между двумя удаленными машинами? Об этом свойстве: service.exported.interfaces = MyInterface. Это просто пример. На самом деле я использую интерфейс org.apache.camel.Endpoint. 09.07.2015
  • Я протестировал пример: чтобы начать с двух контейнеров karaf, размещенных на одной машине, я изменил конфигурацию для тестирования с двумя контейнерами, размещенными на двух разных удаленных машинах. И это прекрасно работает! 09.07.2015
  • Я хочу сделать то же самое, чтобы экспортировать свои веб-сервисы. Я использую Spring DM. Итак, я делаю это на стороне сервера: 09.07.2015
  • ‹cxf:cxfEndpoint id=myservice address=localhost:8181/application/analyser serviceClass=org.my. web.services.Analyser› ‹cxf:properties› ‹entry key=dataFormat value=PAYLOAD /› ‹entry key=allowStreaming value=true /› ‹/cxf:properties› ‹/cxf:cxfEndpoint› 09.07.2015
  • ‹osgi:service id=osgi-service ref=myservice interface=org.apache.camel.Endpoint› ‹osgi:service-properties› ‹entry key=name value=service/› ‹entry key=service.exported.interfaces value= */› ‹/osgi:service-properties› ‹/osgi:service› 09.07.2015
  • Я выполнил установку, как в учебнике с версией 1.6, но я получаю эту ошибку: 09.07.2015
  • 16:25:53,256 | ОШИБКА | пул-21-поток-3 | w.service.RemoteServiceAdminCore 193 | 184 - cxf-dosgi-ri-dsw-cxf - 1.6.0 | не удалось создать сервер для интерфейса org.apache.camel.Endpoint java.lang.NullPointerException в java.lang.reflect.Array.newArray(собственный метод)[:1.7.0_79] в java.lang.reflect.Array.newInstance(Array .java:70)[:1.7.0_79] 09.07.2015
  • Я не уверен, что конечную точку верблюда можно экспортировать как службу CXF. Он никогда не предназначался для использования через удаленное соединение. Чего вы пытаетесь добиться этим? 09.07.2015
  • Я хочу иметь возможность использовать веб-службу, развернутую на другом удаленном компьютере. (Я использую tomcat) Этот сервисный сервис будет вызываться на верблюжьем маршруте. 09.07.2015
  • Вы можете решить эту проблему, добавив запись zookeeper для вашего сервиса tomcat. Затем DOSGi может предложить вам клиентский прокси для этого. К сожалению, для создания записи потребуется собственный код, но это можно сделать 09.07.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..