Как я могу использовать Scala REPL для тестирования java-кода - java и scala REPL дают разные результаты - PullRequest
1 голос
/ 01 декабря 2011

Я пытаюсь использовать REPL для тестирования моего кода Java.Я установил путь к классам и запустил REPL, и я смог получить доступ к своим классам приложений внутри REPL.

Я запустил метод, который выполняет вызов веб-службы, и он вызывает исключение java.lang.ClassCastException.Я написал Java-программу, которая делает то же самое, что и серия команд, введенных в REPL, и запускает ее с тем же путем к классам, она работает без проблем и дает результат.

Любые подсказки, почему это не такработает под скалой?Строгие ли правила приведения в scala? И если я использую API, на котором у меня нет контроля, как я могу сказать Scala вести себя как java, чтобы я мог тестировать свои методы, которые делают много вызовов API икод, написанный другими.

java.lang.ClassCastException: weblogic.webservice.encoding.ImageCodec cannot be cast to weblogic.xml.schema.binding.Serializer
        at weblogic.xml.schema.binding.internal.XSDTypeMapping.addOptionalEntries(XSDTypeMapping.java:762)
        at weblogic.xml.schema.binding.internal.XSDTypeMapping.createOptionalMapping(XSDTypeMapping.java:665)
        at weblogic.xml.schema.binding.internal.XSDTypeMapping.createPrimaryMapping(XSDTypeMapping.java:655)
        at weblogic.xml.schema.binding.internal.XSDTypeMapping.createInstance(XSDTypeMapping.java:138)
        at weblogic.xml.schema.binding.internal.XSDTypeMapping.<clinit>(XSDTypeMapping.java:118)
        at weblogic.xml.schema.binding.internal.TypeMappingFactoryBase.createDefaultMapping(TypeMappingFactoryBase.java:18)
        at weblogic.webservice.core.encoding.DefaultRegistry.<init>(DefaultRegistry.java:110)
        at weblogic.webservice.core.encoding.DefaultRegistry.<init>(DefaultRegistry.java:37)
        at weblogic.webservice.core.rpc.ServiceImpl.<init>(ServiceImpl.java:91)

Так как многие просят исходный код, чтобы ответить на этот вопрос, вот фрагмент, который я ввел в REPL Scala.Он делает вызовы API, защищенные авторским правом и не подлежащие обмену здесь, я могу ответить на вопросы, чтобы предоставить больше информации по этому вопросу, не нарушая нормы.

val clientManager=new ClientManager()
val client=clientManager.getClient(<clientId>)
/*client location is stored in another system which exposes its data as a webservice.
 We use weblogic tools to compile the WSDL to create client (Web service client, not to
 be confused with the client object which represent a customer) to access the system
 hosting the data*/
val res=client.getLocation //exception is thrown at this line where a web-service call is made

Я сделал что-то другое, и я получил совершенно другое исключениена этот раз вместо использования val res=client.getLocation я использовал client.getLocation, не назначая его переменной, и на этот раз было выдано исключение

java.lang.NoClassDefFoundError: Could not initialize class weblogic.xml.schema.binding.internal.XSDTypeMapping
        at weblogic.xml.schema.binding.internal.TypeMappingFactoryBase.createDefaultMapping(TypeMappingFactoryBase.java:18)
        at weblogic.webservice.core.encoding.DefaultRegistry.<init>(DefaultRegistry.java:110)
        at weblogic.webservice.core.encoding.DefaultRegistry.<init>(DefaultRegistry.java:37)
        at weblogic.webservice.core.rpc.ServiceImpl.<init>(ServiceImpl.java:91)

Я выполнил интерпретацию с параметром -nobootcp, и он запустился без выбросаЛюбое исключение, которое выше, но полученный результат равен нулю в обоих случаях

Кто-нибудь использовал Scala REPL для тестирования клиента, написанного из заглушек, сгенерированных weblogic 10.3 и успешно использовавших его?

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Ваша трассировка стека не имеет ничего общего со Scala.Исключение происходит глубоко в некотором веблогическом коде.Как вы думаете, почему Scala вызывает проблему?Наиболее вероятная причина - несоответствие в библиотеке, например, вы используете другой путь к классу в своем тесте Scala, чем в своем тесте Java.

Тем не менее, я постараюсь ответить на ваш неявный вопрос: для ссылочных типовэто может быть эквивалентно выражено как в Java, так и в Scala, правила приведения Scala такие же, как и в Java.

0 голосов
/ 01 декабря 2011

Без кода очень сложно сказать, что происходит.Однако ... поскольку вы упомянули, что запускаете веб-сервис, я предполагаю, что вы используете удаленных актеров Scala.

Перед тем, как start актер попытается выполнить classLoader = getClass().getClassLoader().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...