Проблема в сериализации "scala.math.BigDecimal не имеет конструктора по умолчанию без аргументов" - PullRequest
3 голосов
/ 04 апреля 2011

Я новичок в программировании Scala и Java, поэтому вот моя проблема:

У меня есть объект для сериализации со свойством BigDecimal

import java.util.Date
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
import reflect.BeanProperty

class TestObject {
  @XmlJavaTypeAdapter(classOf[BigDecimalAdapter])
  var test: BigDecimal = 0.00
}

Я получаю эту ошибку:

scala.math.BigDecimal does not have a no-arg default constructor

XMLAdapter:

import javax.xml.bind.annotation.adapters.XmlAdapter

class BigDecimalAdapter extends XmlAdapter[String, BigDecimal] {
  def unmarshal(str: String) = BigDecimal(str)
  def marshal(bD: BigDecimal) = bD.toString()
}

SoapServer:

import javax.jws.soap.SOAPBinding
import javax.jws.{WebParam, WebMethod, WebService}
import javax.xml.ws.Endpoint

@WebService(targetNamespace="test", name="testws", portName="test", serviceName="wsTest")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
class Server {
  @WebMethod(action = "test")
  def test(@WebParam(name = "testParam") testParam:TestObject): TestObject = {
    return testParam
  }

}

object SoapServer { // defined Companion Object for our class
  def main(args: Array[String]) { // main method to make this a runnable application
    val endpoint = Endpoint.publish("http://192.168.189.132:8080/wsTest", new Server())
    System.out.println("Binded to port 8080. Waiting for requests...")
  }
}

1 Ответ

3 голосов
/ 05 апреля 2011

Я думаю, что вы, вероятно, хотите использовать java.math.BigDecimal, а не scala.math.BigDecimal. Используйте полное имя пути:

 import java.math.{BigDecimal => JDec}
 var test: JDec = new JDec(0)

Кажется, что фреймворк jaxb ожидает конструктора без аргументов; Я не знаком с этим достаточно, чтобы понять, почему

...