[JAVA-1874] Can't find codec during insertOne on a collection with a document class and codec registry Created: 24/Jun/15  Updated: 24/Jun/15  Resolved: 24/Jun/15

Status: Closed
Project: Java Driver
Component/s: Codecs
Affects Version/s: 3.0.2
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Matt Filion Assignee: Unassigned
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

I have a CodecProvider, attached to a CodecRegistry which gets applied to a MongoClient. The MongoClient is used to create a collection, and the type "MobilePhone" is passed when returning that collection and the codecRegistry is re-applied to the collection itself. When doing an insert using a MobilePhone record I get the below stack trace.

Looking through the source a bit it looks like RequestMessage will always only ever have the codec's defined in BsonValueCodecProvider. At line 46 it creates a static instance, using fromProviders and nothing makes reference to the current registry defined on MongoClient, or the Collection.

This bug is resulting in being unable to continue implementation and we are on a tight deadline. I have other collections using this pattern to read objects just fine, but not for insert. So I dont know if its more widespread.

Here are some snippets of my implementation itself.

MongoClient

CodecProvider domainCodecProivder = new CodecProvider() {
            @SuppressWarnings("unchecked")
            @Override
            public <T> Codec<T> get(Class<T> type, CodecRegistry registry) {
                LOGGER.debug("Looking for codec for {}",type);
                if( type == Date.class) {
                    return (Codec<T>) new DateCodec();
                }
                .... some other codec's.
 
                if (type == Location.class) {
                    return (Codec<T>) new LocationCodec();
                }
                if (type == SMSMessage.class) {
                    return (Codec<T>) new SMSMessageCodec(registry);
                }
                if (type == MobilePhone.class) {
                    return (Codec<T>) new MobilePhoneCodec(registry);
                }
                LOGGER.debug("Nothing found for {}",type);
                return null;
            }
        };
 
        codecRegistry = CodecRegistries.fromRegistries(
            MongoClient.getDefaultCodecRegistry(),
            CodecRegistries.fromProviders(domainCodecProivder)
        );
        
        mongoClient = new MongoClient(
            Arrays.asList(
                new ServerAddress("server.address", port),
                new ServerAddress("server.address", port)
            ), 
            Arrays.asList(MongoCredential.createCredential("username", "messaging", superSecretPassword.toCharArray())),
            MongoClientOptions.builder()
                .codecRegistry(codecRegistry)
                .readPreference(ReadPreference.nearest())
                .connectionsPerHost(50)
                .build()
            
        );

Getting an instance of the collection.

public <T> MongoCollection<T> getCollection(String databaseName, String collectionName, Class<T> type) {
        return getClient().getDatabase(databaseName).getCollection(collectionName,type).withCodecRegistry(codecRegistry);
    }

Point of failure, insertOne

List<SMSMessage> smsLogs = new ArrayList<SMSMessage>();
            smsLogs.add(smsMessage);
            
            MobilePhone newMobilePhone= new MobilePhone();
            newMobilePhone.setPhoneNumber(phoneNumber);
            newMobilePhone.setSendingNumber(sendingNumber);
            newMobilePhone.setSmsLog(smsLogs);
            
            mobilePhoneCollection.insertOne(newMobilePhone);

 



 Comments   
Comment by Matt Filion [ 24/Jun/15 ]

Jeff,

Okay that sounds good. I had trouble locating the forums, I'll look for
them more next time.

Matt

On Wed, Jun 24, 2015 at 12:00 PM, Jeff Yemin (JIRA) <jira@mongodb.org>

Comment by Jeffrey Yemin [ 24/Jun/15 ]

OK, just remember that MongoDB requires that every document in a collection has a unique _id field, and if one is not supplied, it will be generated on the server. That's probably not what you want, so you should think about what you want the unique identifier to be and generate it in your codec or domain class.

In the future, please address questions like this to our users group. That way the discussion can better benefit the community at large. Often issues that seem like bugs turn out not to be, and if it is a bug, it can always be reported once that's determined.

I'm going to close this as Works As Designed.

Comment by Matt Filion [ 24/Jun/15 ]

Jeff,

I believe i saw BsonDocument on one of the many Codec examples that I used
to write this. I'll remove that.

You are correct on the uuid, the model is somewhat incomplete and really
the "real" id is the combination of phoneNuber and senderNumber. So I may
not worry about the _id or uuid at all.

Matt

On Wed, Jun 24, 2015 at 11:26 AM, Jeff Yemin (JIRA) <jira@mongodb.org>

On Wed, Jun 24, 2015 at 11:26 AM, Jeff Yemin (JIRA) <jira@mongodb.org>
wrote:

Comment by Jeffrey Yemin [ 24/Jun/15 ]

OK, it's as I suspected: MobilePhone extends BsonDocument. Can you explain your rationale for that? If you remove that, both encoding and decoding will work as you would expect.

One other thing I noticed in the MobilePhoneCodec: it's not writing an "_id" field, and as a result, the server will generated one for you. Since you already have a uuid, your intention is probably to use that as the _id in this collection:

writer.writeObjectId("_id",value.getUuid());

and corresponding change in the decode method.

Comment by Matt Filion [ 24/Jun/15 ]

I did find some bugs in my decode/encode logic where I had some name/values
reversed. That has since been cleaned up. Do you think it could have
contributed? I'm not yet at a point where I can fully test its effect but
if you had a theory I didnt want you to chase a ghost.

Matt

On Wed, Jun 24, 2015 at 11:05 AM, Matt Filion <matt@pay2daysolutions.com>

Comment by Matt Filion [ 24/Jun/15 ]

Jeff,

Here is what mobile phone and the corresponding codec look ;ike

public class MobilePhone extends BsonDocument implements Destination {
 
    /**
     *
     */
    private static final long serialVersionUID = 2709107992433773529L;
 
    private ObjectId          uuid;
    private String            phoneNumber;
    private String            sendingNumber;
    private String            consumerUUID;
    private String            pin;
    private String            carrier;
 
    private Date              verifiedOn;
    private Date              createdOn;
    private Date              deactivatedOn;
    private Date              optedOutOn;
    private List<SMSMessage>  smsLog;
    public ObjectId getUuid() {
        return uuid;
    }
    public void setUuid(ObjectId uuid) {
        this.uuid = uuid;
    }
    public String getPhoneNumber() {
        return phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
    public String getSendingNumber() {
        return sendingNumber;
    }
    public void setSendingNumber(String sendingNumber) {
        this.sendingNumber = sendingNumber;
    }
    public String getConsumerUUID() {
        return consumerUUID;
    }
    public void setConsumerUUID(String consumerUUID) {
        this.consumerUUID = consumerUUID;
    }
    public String getPin() {
        return pin;
    }
    public void setPin(String pin) {
        this.pin = pin;
    }
    public String getCarrier() {
        return carrier;
    }
    public void setCarrier(String carrier) {
        this.carrier = carrier;
    }
    public Date getVerifiedOn() {
        return verifiedOn;
    }
    public void setVerifiedOn(Date verifiedOn) {
        this.verifiedOn = verifiedOn;
    }
    public Date getCreatedOn() {
        return createdOn;
    }
    public void setCreatedOn(Date createdOn) {
        this.createdOn = createdOn;
    }
    public Date getDeactivatedOn() {
        return deactivatedOn;
    }
    public void setDeactivatedOn(Date deactivatedOn) {
        this.deactivatedOn = deactivatedOn;
    }
    public Date getOptedOutOn() {
        return optedOutOn;
    }
    public void setOptedOutOn(Date optedOutOn) {
        this.optedOutOn = optedOutOn;
    }
    public List<SMSMessage> getSmsLog() {
        return smsLog;
    }
    public void setSmsLog(List<SMSMessage> smsLog) {
        this.smsLog = smsLog;
    }
 
    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("MobilePhone [uuid=");
        builder.append(uuid);
        builder.append(", phoneNumber=");
        builder.append(phoneNumber);
        builder.append(", sendingNumber=");
        builder.append(sendingNumber);
        builder.append(", consumerUUID=");
        builder.append(consumerUUID);
        builder.append(", pin=");
        builder.append(pin);
        builder.append(", carrier=");
        builder.append(carrier);
        builder.append(", verifiedOn=");
        builder.append(verifiedOn);
        builder.append(", createdOn=");
        builder.append(createdOn);
        builder.append(", deactivatedOn=");
        builder.append(deactivatedOn);
        builder.append(", optedOutOn=");
        builder.append(optedOutOn);
        builder.append(", smsLog=");
        builder.append(smsLog);
        builder.append("]");
        return builder.toString();
    }
 
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = super.hashCode();
        result = prime * result + ((phoneNumber == null) ? 0 :
phoneNumber.hashCode());
        result = prime * result + ((sendingNumber == null) ? 0 :
sendingNumber.hashCode());
        result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (!super.equals(obj))
            return false;
        if (getClass() != obj.getClass())
            return false;
        MobilePhone other = (MobilePhone) obj;
        if (phoneNumber == null) {
            if (other.phoneNumber != null)
                return false;
        } else if (!phoneNumber.equals(other.phoneNumber))
            return false;
        if (sendingNumber == null) {
            if (other.sendingNumber != null)
                return false;
        } else if (!sendingNumber.equals(other.sendingNumber))
            return false;
        if (uuid == null) {
            if (other.uuid != null)
                return false;
        } else if (!uuid.equals(other.uuid))
            return false;
        return true;
    }
}
 
public class MobilePhoneCodec implements CollectibleCodec<MobilePhone> {
 
    private static final Logger LOGGER =
LoggerFactory.getLogger(MobilePhoneCodec.class);
 
    private CodecRegistry codecRegistry;
 
    public MobilePhoneCodec(final CodecRegistry codecRegistry) {
        this.codecRegistry = codecRegistry;
    }
 
    @Override
    public void encode(BsonWriter writer, MobilePhone value, EncoderContext
encoderContext) {
        Codec<Date> dateCodec = codecRegistry.get(Date.class);
 
        writer.writeStartDocument();
 
        writer.writeObjectId("uuid",value.getUuid());
        writer.writeString("sendingNumber",value.getSendingNumber());
        writer.writeString("phoneNumber",value.getPhoneNumber());
 
        if(value.getCreatedOn()!=null) {
            writer.writeName("createdOn");
            encoderContext.encodeWithChildContext(dateCodec, writer,
value.getCreatedOn());
        }
        if(value.getCarrier()!=null) {
            writer.writeString("carrier",value.getCarrier());
        }
        if(value.getConsumerUUID()!=null) {
            writer.writeString("consumerUUID",value.getConsumerUUID());
        }
        if(value.getPin()!=null) {
            writer.writeString("pin",value.getPin());
        }
 
        if(value.getOptedOutOn()!=null) {
            writer.writeName("optedOutOn");
            encoderContext.encodeWithChildContext(dateCodec, writer,
value.getOptedOutOn());
        }
 
        if(value.getDeactivatedOn()!=null) {
            writer.writeName("deactivatedOn");
            encoderContext.encodeWithChildContext(dateCodec, writer,
value.getDeactivatedOn());
        }
 
        if(value.getVerifiedOn()!=null) {
            writer.writeName("verifiedOn");
            encoderContext.encodeWithChildContext(dateCodec, writer,
value.getVerifiedOn());
        }
 
        if(value.getSmsLog()!=null && value.getSmsLog().isEmpty()==false) {
 
            Codec<SMSMessage> smsMessageCodec =
codecRegistry.get(SMSMessage.class);
 
            writer.writeStartArray("smsLog");
            for (SMSMessage smsMessage : value.getSmsLog()) {
                encoderContext.encodeWithChildContext(smsMessageCodec,
writer, smsMessage);
            }
 
            writer.writeEndArray();
        }
 
        writer.writeEndDocument();
    }
 
    @Override
    public Class<MobilePhone> getEncoderClass() {
        return MobilePhone.class;
    }
 
    @Override
    public MobilePhone decode(BsonReader reader, DecoderContext
decoderContext) {
 
        MobilePhone mobilePhone = new MobilePhone();
        Codec<Date> dateCodec   = codecRegistry.get(Date.class);
 
        reader.readStartDocument();
 
        /*
         * Loops through each named field and sets the appropriate field
         *  on the MobilePhone object, until the end of document is
         *  found. Doing it this way ensures that if another application
         *  writes a document, and does it in a different order
         *  that the object will still be readable by this application.
         */
        AbstractBsonReader abstractReader = (AbstractBsonReader) reader;
        while (abstractReader.getState() != State.END_OF_DOCUMENT) {
            read(mobilePhone,dateCodec,reader,decoderContext);
        }
 
        reader.readEndDocument();
 
        return mobilePhone;
    }
 
    private void read(MobilePhone mobilePhone, Codec<Date> dateCodec,
BsonReader reader, DecoderContext decoderContext) {
 
        String name = reader.readName();
        switch (name) {
            case "uuid" :
                mobilePhone.setUuid(reader.readObjectId());
                LOGGER.debug("set UUID");
                break;
 
            case "carrier":
                mobilePhone.setCarrier(reader.readString());
                break;
 
            case "consumerUUID":
                mobilePhone.setConsumerUUID(reader.readString());
                break;
 
            case "phoneNumber":
                mobilePhone.setPhoneNumber(reader.readString());
                break;
 
            case "sendingNumber":
                mobilePhone.setSendingNumber(reader.readString());
                break;
 
            case "pin":
                mobilePhone.setPin(reader.readString());
                break;
 
            case "createdOn":
                mobilePhone.setCreatedOn(dateCodec.decode(reader,
decoderContext));
                break;
 
            case "deactivatedOn":
                mobilePhone.setDeactivatedOn(dateCodec.decode(reader,
decoderContext));
                break;
 
            case "optedOutOn":
                mobilePhone.setOptedOutOn(dateCodec.decode(reader,
decoderContext));
                break;
 
            case "verifiedOn":
                mobilePhone.setVerifiedOn(dateCodec.decode(reader,
decoderContext));
                break;
 
            case "smsLog":
                Codec<SMSMessage> smsMessageCodec =
codecRegistry.get(SMSMessage.class);
                reader.readStartArray();
                mobilePhone.setSmsLog(new ArrayList<SMSMessage>());
 
                while (reader.readBsonType() != BsonType.END_OF_DOCUMENT) {
 
mobilePhone.getSmsLog().add(smsMessageCodec.decode(reader, decoderContext));
                }
 
                reader.readEndArray();
                break;
 
            default:
                LOGGER.warn("read() does not map {} so the data will not be
attached to {}",name,mobilePhone.getClass());
                reader.skipValue();
                break;
        }
    }
 
    @Override
    public MobilePhone generateIdIfAbsentFromDocument(MobilePhone document)
{
        if(document.getUuid()==null) {
            document.setUuid(new ObjectId());
        }
        return document;
    }
 
    @Override
    public boolean documentHasId(MobilePhone document) {
        return document.getUuid()!=null;
    }
 
    @Override
    public BsonValue getDocumentId(MobilePhone document) {
        if(!(documentHasId(document))) {
            throw new IllegalStateException("This document does not contain
an ID");
        }
        return new BsonObjectId(document.getUuid());
    }
}

On Wed, Jun 24, 2015 at 10:33 AM, Jeff Yemin (JIRA) <jira@mongodb.org>

Comment by Jeffrey Yemin [ 24/Jun/15 ]

Can you share the class definition for MobilePhone and MobilePhoneCodec please? I have an idea of what might be happening.

Comment by Jeffrey Yemin [ 24/Jun/15 ]

Hi Matt,

I'm not able to reproduce this. Looking at the code samples in the description, there is some room for interpretation as to how the getCollection method is used. In particular, have you ensured that the codecRegistry referred to in the getCollection method contains the domainCodecProvider referenced above?

I posted a more complete example here, which works as I think you would expect it to. Please take a look and let me know what you think is different about your application.

It is not necessary to re-apply the code registry to each collection. The collection will pick it up from the database, which picks it up from the client.

The fact that RequestMessages uses BsonValueCodecProvider is not what's causing the problem. Once we get to the bottom of this, I can get into the explanation of how that all works.

Comment by Matt Filion [ 24/Jun/15 ]

Missing stracktrace is here.

04:22:54,749 DEBUG [com.mycompany.external.MongoService] (default task-6) Looking for codec for class com.mycompany.messaging.model.MobilePhone
04:22:54,758 DEBUG [com.mycompany.external.MongoService] (default task-6) Looking for codec for class com.mycompany.messaging.model.SMSMessage
04:22:54,759 DEBUG [com.mycompany.external.MongoService] (default task-6) Looking for codec for class com.mycompany.messaging.model.Location
04:22:54,859 ERROR [org.jboss.as.ejb3] (default task-6) javax.ejb.EJBTransactionRolledbackException: Can't find a codec for class com.mycompany.messaging.model.MobilePhone.
04:22:54,859 ERROR [org.jboss.as.ejb3.invocation] (default task-6) JBAS014134: EJB Invocation failed on component MobilePhoneService for method public abstract com.mycompany.messaging.model.MobilePhone com.mycompany.messaging.MobilePhoneServiceRemote.findAndUpdate(java.lang.String,java.lang.String,com.mycompany.messaging.model.SMSMessage): javax.ejb.EJBTransactionRolledbackException: Can't find a codec for class com.mycompany.messaging.model.MobilePhone.
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleInCallerTx(CMTTxInterceptor.java:163) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:253) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.supports(CMTTxInterceptor.java:401) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:243) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.remote.EJBRemoteTransactionPropagatingInterceptor.processInvocation(EJBRemoteTransactionPropagatingInterceptor.java:79) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:43) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:95) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
	at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:439)
	at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
	at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
	at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185)
	at org.jboss.as.ejb3.remote.LocalEjbReceiver.processInvocation(LocalEjbReceiver.java:245) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:184) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBObjectInterceptor.handleInvocation(EJBObjectInterceptor.java:58) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBHomeInterceptor.handleInvocation(EJBHomeInterceptor.java:83) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.TransactionInterceptor.handleInvocation(TransactionInterceptor.java:42) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:125) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:253) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:198) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144) [jboss-ejb-client-2.0.1.Final.jar:2.0.1.Final]
	at com.sun.proxy.$Proxy121.findAndUpdate(Unknown Source)
	at com.mycompany.endpoint.TwillioEndpoint.inboundSMS(TwillioEndpoint.java:121)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_40]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_40]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_40]
	at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_40]
	at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
	at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
	at org.jboss.as.ejb3.concurrency.ContainerManagedConcurrencyInterceptor.processInvocation(ContainerManagedConcurrencyInterceptor.java:104) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
	at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
	at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
	at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.singleton.SingletonComponentInstanceAssociationInterceptor.processInvocation(SingletonComponentInstanceAssociationInterceptor.java:52) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:273) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:340) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:43) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:95) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
	at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:448)
	at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
	at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
	at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185)
	at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:182)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
	at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)
	at com.mycompany.endpoint.TwillioEndpoint$$$view3.inboundSMS(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_40]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_40]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_40]
	at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_40]
	at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:137) [resteasy-jaxrs-3.0.10.Final.jar:]
	at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:296) [resteasy-jaxrs-3.0.10.Final.jar:]
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:250) [resteasy-jaxrs-3.0.10.Final.jar:]
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:237) [resteasy-jaxrs-3.0.10.Final.jar:]
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:356) [resteasy-jaxrs-3.0.10.Final.jar:]
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:179) [resteasy-jaxrs-3.0.10.Final.jar:]
	at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:220) [resteasy-jaxrs-3.0.10.Final.jar:]
	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56) [resteasy-jaxrs-3.0.10.Final.jar:]
	at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51) [resteasy-jaxrs-3.0.10.Final.jar:]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [jboss-servlet-api_3.1_spec-1.0.0.Final.jar:1.0.0.Final]
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) [shiro-web-1.2.3.jar:1.2.3]
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) [shiro-web-1.2.3.jar:1.2.3]
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-1.2.3.jar:1.2.3]
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-1.2.3.jar:1.2.3]
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) [shiro-core-1.2.3.jar:1.2.3]
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) [shiro-web-1.2.3.jar:1.2.3]
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-1.2.3.jar:1.2.3]
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:63) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:261) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166) [undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759) [undertow-core-1.1.0.Final.jar:1.1.0.Final]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [rt.jar:1.8.0_40]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [rt.jar:1.8.0_40]
	at java.lang.Thread.run(Thread.java:745) [rt.jar:1.8.0_40]
Caused by: org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.mycompany.messaging.model.MobilePhone.
	at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46) [bson-3.0.2.jar:]
	at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63) [bson-3.0.2.jar:]
	at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:37) [bson-3.0.2.jar:]
	at com.mongodb.connection.RequestMessage.getCodec(RequestMessage.java:208) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.InsertCommandMessage.writeTheWrites(InsertCommandMessage.java:99) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.InsertCommandMessage.writeTheWrites(InsertCommandMessage.java:43) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.BaseWriteCommandMessage.encodeMessageBody(BaseWriteCommandMessage.java:112) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.BaseWriteCommandMessage.encodeMessageBody(BaseWriteCommandMessage.java:35) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.RequestMessage.encode(RequestMessage.java:132) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.BaseWriteCommandMessage.encode(BaseWriteCommandMessage.java:89) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.WriteCommandProtocol.sendMessage(WriteCommandProtocol.java:170) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.java:73) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:66) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.java:37) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:155) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:219) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.connection.DefaultServerConnection.insertCommand(DefaultServerConnection.java:108) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.MixedBulkWriteOperation$Run$2.executeWriteCommandProtocol(MixedBulkWriteOperation.java:416) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.MixedBulkWriteOperation$Run$RunExecutor.execute(MixedBulkWriteOperation.java:604) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.MixedBulkWriteOperation$Run.execute(MixedBulkWriteOperation.java:363) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:148) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.MixedBulkWriteOperation$1.call(MixedBulkWriteOperation.java:141) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:186) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:177) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:141) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.operation.MixedBulkWriteOperation.execute(MixedBulkWriteOperation.java:72) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.Mongo.execute(Mongo.java:747) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.Mongo$2.execute(Mongo.java:730) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:482) [mongo-java-driver-3.0.2.jar:]
	at com.mongodb.MongoCollectionImpl.insertOne(MongoCollectionImpl.java:277) [mongo-java-driver-3.0.2.jar:]
	at com.mycompany.messaging.MobilePhoneService.findAndUpdate(MobilePhoneService.java:104) [classes:]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_40]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) [rt.jar:1.8.0_40]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.8.0_40]
	at java.lang.reflect.Method.invoke(Method.java:497) [rt.jar:1.8.0_40]
	at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
	at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) [wildfly-jpa-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
	at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:55) [weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
	at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) [wildfly-weld-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) [wildfly-ee-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
	at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInCallerTx(CMTTxInterceptor.java:251) [wildfly-ejb3-8.2.0.Final.jar:8.2.0.Final]
	... 166 more

Generated at Thu Feb 08 08:55:44 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.